杰克逊反序列化问题

问题描述:

我有以下的JSON我从一个REST调用接收:杰克逊反序列化问题

"socialConnectionsData" : { 
    "friends" : [ { 
    "friend" : { 
     "firstname" : "John", 
     "lastname" : "Doe" 
    } 
    }] 
} 

我现在的类看起来是这样的:

public class SocialConnectionsData { 
private List<Friend> friends; 

public List<Friend> getFriends() { 
    return friends; 
} 

public void setFriends(List<Friend> friends) { 
    this.friends = friends; 
}  
} 

不过,我得到一个杰克逊例外指出“朋友“是一个无法识别的领域。我将如何收集好友并保持好友类型?

在我看来,你有一个额外的财产名称。杰克逊期待JSON像这样符合您的对象:

"socialConnectionsData" : { 
    "friends" : [ { 
     "firstname" : "John", 
     "lastname" : "Doe" 
    }] 
} 

你不应该需要做任何事,因为你的清单与作为通用参数宣布维持朋友的类型。

如果你想绕走另一条路,让你的对象JSON匹配,那么你就需要间接像这样一个额外的级别:

public class SocialConnectionsData { 
    private List<FriendWrapper> friends; 

    public List<FriendWrapper> getFriends() { 
     return friends; 
    } 

    public void setFriends(List<FriendWrapper> friends) { 
     this.friends = friends; 
    }  
} 

public class FriendWrapper { 
    private Friend friend; 

    public Friend getFriend() { 
     return friend; 
    } 

    public void setFriend(Friend friend) { 
     this.friend = friend; 
    } 
} 
+0

在这种情况下,我没有试图让JSON匹配我的对象结构,而是反过来。我试图创建一个对象结构来匹配返回的JSON,因为我无法改变JSON响应。在这种情况下,JSON由XStream生成。 – 2011-05-31 12:40:50

+0

好吧......我更新了我的答案,以展示如何去任何一种方式......更新类以匹配JSON或更新JSON以匹配类。希望有所帮助! – stevevls 2011-05-31 14:19:24

因为房产是“朋友”而不是“朋友”?

你必须JSON对象的结构相匹配,并这里的错误消息确实指出了问题:您的主级别对象(SocialConnectionsData)没有属性“socialConnectionsData”。班级名称无关紧要。

因此,无论你应该最水滴“socialConnectionsData”或使用包装物,如:

class Wrapper { 
    public SocialConnectionsData socialConnectionsData; // and/or setter to set it 
} 

,并绑定到它。这将使JSON和对象结构相匹配。