2011-02-25 35 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

相关问题