我有这个函数来返回一个有效的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!
答案 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()
等。看看杰克逊的ObjectNode
,ArrayNode
。注意:据我所知,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);
}