[英]Parsing a Json array using Play Framework and Java
我有以下Json结构:
{
"name": "John",
"surname": "Doe",
"languages": [
{"language": "english", "level": "3"},
{"language": "french", "level": "1"}
]
}
我正在使用Play Framework来解析HTTP消息中的Json数据,该消息是使用自行开发的REST服务发送的。 我已经知道如何通过查看文档来解析Json数据中的名称和姓氏,这可以通过以下方式完成:
JsonNode json = request().body().asJson();
String name = json.findPath("name").textValue();
String surname = json.findPath("surname").textValue();
现在我的问题是,我如何解析Json数据中的数组“语言”。 我发现了一些关于这个问题的其他帖子,但他们都使用Scala,我无法理解,所以我最好找一个Java解决方案。
我已经尝试了几件事,例如:
List<JsonNode> languages = json.findPath("languages").getElements();
根据文档,json.findPath()返回一个JsonNode,在其上可以调用函数getElements(),它将返回JsonNode的Iterator。 但是我在getElements上遇到编译错误:“jsonNode类型的方法getElements()未定义”
谁知道解析这样一个数组的简单方法? 提前致谢
您可以在for-each循环中执行此操作:
JsonNode json = request().body().asJson();
for (JsonNode language : json.withArray("languages")) {
Logger.info("language -> " + language.get("someField").asText());
//do something else
}
或者,如果你是lambdas:
json.withArray("languages").forEach(language -> Logger.info("language -> " + language));
另外......创建ArrayNode
的正确方法:
//using a mapper(important subject the mapper is)
ObjectMapper mapper = new ObjectMapper();
ArrayNode array = mapper.createArrayNode();
//using an existing ArrayNode from a JsonNode
ArrayNode array = json.withArray("fieldName");
//or using Play's Json helper class
ArrayNode array = Json.newArray();
你应该真正了解更多关于jackson / fasterxml的功能。 这是一个非常高效的lib。 JacksonInFiveMinutes是一个良好的开端。
试试这个:
JsonNode node = (JsonNode)json.findPath("languages");
ArrayNode arr = (ArrayNode)node;
Iterator<JsonNode> it = arr.iterator();
while (it.hasNext()) {
JSONObject obj = it.next();
System.out.println("language: " + obj.findPath("language").getTextValue();
}
在这里,我只是打印其中一个元素,但你可以做任何你想要的当然:)
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.