使用Play渲染简单的静态JSON响应!和Java

时间:2014-03-09 17:49:33

标签: java json playframework

我有这个函数来返回一个有效的JSON响应:

public static Result response() {
    ObjectNode result = Json.newObject();        
    result.put("status", "OK");
    result.put("response", "Hello ");
    return ok(result);        
}

但我想要的是在“result”属性中服务一个对象数组,如:

{
   "status": "OK",
   "response": {
      "results": [
         {
             "key1": "value",
             "key2": 90,
             "key3": "value"
         },
         {
             "key1": "value"
             "key2": 90,
             "key3": "value",
         }
      ]
   }
}

我该怎么做?我需要使用Java和Play!

3 个答案:

答案 0 :(得分:2)

Play框架使用Jackson。因此,您可以使用Jackson本身:

private static final JsonNodeFactory NODE_FACTORY = JsonNodeFactory.instance;

// ...
final ArrayNode results = NODE_FACTORY.arrayNode();
ObjectNode oneResult;

oneResult = NODE_FACTORY.objectNode(); // or Json.newObject();
oneResult.put(...); // etc
results.add(result);

//rinse, repeat for all other result objects, then:
result.put("results", results);

我想Json课程也有.newArray()等。看看杰克逊的ObjectNodeArrayNode。注意:据我所知,Play使用Jackson 1.9.x,这是史前的......

但实际上,你应该尝试使用杰克逊的{de,}序列化。

答案 1 :(得分:0)

我没等你回答什么是Play!,所以我是根据Gson写的。 尝试使用这个类:

public class Result implements Serializable {
    String status;
    Response response;

    class Response implements Serializable {
        List<ListItem> results;

        class ListItem implements Serializable {
            String key1;
            Integer key2;
            String key3;
        }
    }
}

它100%适用于你的json片段。你可以用必要的字段补充它。

然后你可以使用Gson:

Gson gson = new GsonBuilder().setPrettyPrinting().create();
Result result = gson.fromJson(new FileReader(new File("json.json")), Result.class);
String json = gson.toJson(result);
System.out.println(json);

打印:

{
  "status": "OK",
  "response": {
    "results": [
      {
        "key1": "value",
        "key2": 90,
        "key3": "value"
      },
      {
        "key1": "value",
        "key2": 90,
        "key3": "value"
      }
    ]
  }
}

尝试这个方向。

答案 2 :(得分:0)

如何在结果中返回ArrayNode,例如:

public static Result foo() {
    ArrayNode arrayNode = Json.newObject().putArray("bars");
    arrayNode.add("hello");
    arrayNode.add("world");
    return ok(arrayNode);
}