Win*_*ute 7 json playframework-2.0
我想使用play 2.1框架附带的Json库.但我坚持将json对象反序列化为java List.
有了gson,你可以写s.th. 喜欢
Type type = new TypeToken<List<XYZ>>(){}.getType();
List<XYZ> xyzList = gson.fromJson(jsonXyz, type);
Run Code Online (Sandbox Code Playgroud)
有没有办法用play.libs.Json.fromJson做同样的事情?
任何帮助赞赏.
编辑(17.12.2013):
我做了以下工作来解决这个问题.我想有更好的方法,但我没有找到它.
List<MyObject> response = new ArrayList<MyObject>();
Promise<WS.Response> result = WS.url(Configuration.getRestPrefix() + "myObjects").get();
WS.Response res = result.get();
JsonNode json = res.asJson();
if (json != null) {
for (JsonNode jsonNode : json) {
if (jsonNode.isArray()) {
for (JsonNode jsonNodeInner : jsonNode) {
MyObject mobj = Json.fromJson(jsonNodeInner, MyObject.class);
response.add(bst);
}
} else {
MyObject mobj = Json.fromJson(jsonNode, MyObject.class);
response.add(bst);
}
}
}
return response;
Run Code Online (Sandbox Code Playgroud)
Play Java的Json库实际上只是Jackson JSON库(http://jackson.codehaus.org/)的一个薄包装器.这里提到了 Jackson对反序列化自定义对象列表的方法.
对于你的情况,一旦你从响应体解析json,你会做这样的事情,假设MyObject是一个简单的POJO:
JsonNode json = res.asJson();
try{
List<MyObject> objects = new ObjectMapper().readValue(json, new TypeReference<List<MyObject>>(){});
}catch(Exception e){
//handle exception
}
Run Code Online (Sandbox Code Playgroud)
我假设您根据编辑询问Play Java,Play Scala的JSON库也基于Jackson,但具有更多功能和语法糖以适应功能编程模式.