2011-05-27 157 views
1

我有以下的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; 
}  
} 

不過,我得到一個傑克遜例外指出「朋友「是一個無法識別的領域。我將如何收集好友並保持好友類型?

回答

1

在我看來,你有一個額外的財產名稱。傑克遜期待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

1

因爲房產是「朋友」而不是「朋友」?

1

你必須JSON對象的結構相匹配,並這裏的錯誤消息確實指出了問題:您的主級別對象(SocialConnectionsData)沒有屬性「socialConnectionsData」。班級名稱無關緊要。

因此,無論你應該最水滴「socialConnectionsData」或使用包裝物,如:

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

,並綁定到它。這將使JSON和對象結構相匹配。