play.libs.Json.fromJson如何在Java中处理List <T>?

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)

jos*_*ley 8

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,但具有更多功能和语法糖以适应功能编程模式.