2011-02-25 67 views
0

[{ 「ID」: 「hzQ8ll」, 「CreationDate」: 「星期四,2011年2月24日12點53分31秒GMT」, 「計數」:6中, 「名稱」: 「SOMETAG」}]如何使用Jackson Annotations序列化此JSON數組字符串?

內部是Tag型的,所以我剛纔寫的Java類:

public class Tags { 
    public List <Tag>tags; 
} 

,但我得到com.sun.jersey.api.client.ClientHandlerException

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of com.test.Tags out of START_ARRAY token 

我使用澤西與JacksonJsonProvider李柯本:

ClientConfig config = new DefaultClientConfig(); 
config.getClasses().add(JacksonJsonProvider.class); 

然後,我只是做了一個簡單Jersey客戶端調用:

ClientResponse response = builder.get(ClientResponse.class); 
Tags tags = response.getEntity(Tags.class); 

任何想法?大多數時候,我的最外層元素都有一個與之相關的名稱,所以這對我來說是新的。感謝您的幫助

+0

你能告訴我們實際的代碼,你使用它? – 2011-02-25 22:18:06

+0

見上。我使用球衣,所以沒有真正的傑克遜代碼,因爲我讓供應商爲我處理它。謝謝 – 2011-02-25 22:30:42

+0

什麼是建設者? – 2011-02-25 22:37:33

回答

3

您可能必須聲明Tag[]而不是List<Tag>。 我有一個類似的問題與不同的JSON庫。 這似乎與內省通用容器的困難有關。

你有一個奇怪的get()用法。

http://jersey.java.net/nonav/apidocs/1.5/jersey/com/sun/jersey/api/client/UniformInterface.html#get%28java.lang.Class%29

返回和參數類型應該是相同的。

或者:

ClientResponse resp = builder.get(ClientResponse.class); 

Tag[] resp = builder.get(Tag[].class); 

無論如何,這似乎塔的問題是,你的JSON數據是一個數組,它被反序列化到的東西,是不是(標籤)。

直接試試這個:

Tag[] tags = response.getEntity(Tag[].class); 
+0

感謝您的快速響應。我將List 標籤更改爲Tag []標籤,我得到了同樣的錯誤。 – 2011-02-25 21:31:10

+0

對於代碼抱歉。我糾正了。我知道我得到一個JSON數組,所以我想我的問題是我如何定義一個Java對象,以便傑克遜將解析正確的JSON數組?謝謝 – 2011-02-26 05:03:22

+1

應該像Tag [] tags = response.getEntity(Tag []。class);或列表 tags = response.getEntity(List .class); – 2011-02-26 14:07:10

相關問題