2014-10-09 149 views
1

下面我有,我试图解析使用杰克逊JSON解析与杰克逊

一个POJO一个JSON
{ 
    "Response": { 
     "userIds": [ 
      "http://example.com:10249/User/526241869918679991" 
     ], 
     "userGroupIds": [ 
      "http://example.com:10249/UserGroup/1056659494710887089" 
     ], 
     "accountIds": [ 
      "http://example.com:10249/ServiceAccount/3354613317986071030" 
     ], 
     "success": true 
    } 
} 

我的回应POJO片段是如下

private boolean success; 
private List<String> accountIds; 
private List<String> userIds; 
private List<String> userGroupIds; 

和他们的getter和setter

我的声明是错误的,因为我收到了“org.codehaus.jackson.map.JsonMappingException:无法反序列化START_OBJECT标记的java.util.List实例”错误解析“

解析逻辑如下:

jsonMapper.readValue(responseJSONString, new TypeReference<List<Response>>() {}); 

任何想法,我做了错误?

回答

3

首先,您的输入始于"Response": ...,它必须对应某个对象中的某个字段。所以,你有没有什么是Response容器的JSON表示:

class ResponseContainer { 
    Response Response; 
} 

其次,你尝试解析一个列表但你输入不带[启动(其中列出应启动),但其{表示这是一个对象。所以,如果你希望它是一个列表,包裹输入[ ... ]

因此,要么改变你的输入是一个列表:

| 
V 

[ 
    { 
     "Response": { 
      "userIds": [ 
       "http://example.com:10249/User/526241869918679991" 
      ], 
      "userGroupIds": [ 
       "http://example.com:10249/UserGroup/1056659494710887089" 
      ], 
      "accountIds": [ 
       "http://example.com:10249/ServiceAccount/3354613317986071030" 
      ], 
      "success": true 
     } 
    } 
] 

^ 
| 
+0

你的JSON数组反应容器阵列,而不是一个数组响应。 – 2014-10-09 19:29:59

+0

W 0123。谢谢。我会修改。 – aioobe 2014-10-09 19:38:37