Mai*_*r00 2 java android json linkedhashmap jackson
我正在开发一个Android REST客户端.我们使用JSON作为数据交换格式,因此我使用Jackson解析器.我从服务器获得不同的Json响应,如简单数组:
{"user_id":"332","user_role":"1"}
Run Code Online (Sandbox Code Playgroud)
或者是其他东西.所有这些我解析的东西LinkedHashMap<String, Object>,一切都很完美但是当我从服务器得到这个响应时:
[ { "user_id":"352",
"user_role":"expert",
"name":"Test 12-18",
"description":"Test" },
{ "user_id":"263",
"user_role":"novice lab",
"name":"Tom's Desk",
"description":"Desk"}
]
Run Code Online (Sandbox Code Playgroud)
我解析后得到null:{}.这是我使用Jackson的代码:
ObjectMapper mapParametersToJSON = new ObjectMapper();
String serverResponseBody = responseFromServer.getBody();
LinkedHashMap<String, Object> resultofOperation = new LinkedHashMap<String,
Object>();
TypeReference<LinkedHashMap<String,Object>> genericTypeReferenceInformation = new
TypeReference<LinkedHashMap<String,Object>>() {};
try {
resultofOperation = mapParametersToJSON.readValue(serverResponseBody,
genericTypeReferenceInformation);
Run Code Online (Sandbox Code Playgroud)
那么,为什么杰克逊没能解析这个呢?我怎样才能解决这个问题?
其他人提出了这个问题,但解决方案有点不完整.如果需要处理JSON对象和数组,可以绑定java.lang.Object,检查类型:
Object stuff = objectMapper.readValue(json, Object.class);
Run Code Online (Sandbox Code Playgroud)
并且你会得到List或者Map(具体地,ArrayList或者LinkedHashMap,默认情况下;这些默认值可以更改).
或者您可以使用以下命令执行JSON树JsonNode:
JsonNode root = objectMapper.readTree(json);
if (root.isObject()) { // JSON Object
} else if (root.isArray()) { ...
}
Run Code Online (Sandbox Code Playgroud)
后者往往更方便.
一个好处是你仍然可以从这些中创建常规POJO,例如:
if(root.isObject()){MyObject ob = objectMapper.treeToValue(MyObject.class); } //或者Object,使用objectMapper.convertValue(ob, MyObject.class)
所以你甚至可以针对不同类型进行不同的处理; 来回不同的表现形式.
| 归档时间: |
|
| 查看次数: |
6098 次 |
| 最近记录: |