java - 使用 Play Framework 和 Java 解析 Json 数组

标签 java arrays json playframework jackson

我有以下 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 数据中的数组“languages”。我发现了一些关于这个问题的其他帖子,但他们都在使用 Scala,我无法理解,所以最好我正在寻找 Java 解决方案。

我已经尝试过几种方法,例如:

    List<JsonNode> languages = json.findPath("languages").getElements();

根据文档 json.findPath() 返回一个 JsonNode,可以在其上调用函数 getElements(),它将返回一个 JsonNode 的迭代器。但是我在 getElements 上遇到编译错误:“方法 getElements() 未定义 JsonNode 类型”

有谁知道解析这样一个数组的简单方法吗? 提前致谢

最佳答案

您可以像这样在 for-each 循环中执行此操作:

JsonNode json = request().body().asJson();

for (JsonNode language : json.withArray("languages")) {
    Logger.info("language -> " + language.get("someField").asText());
    //do something else
}

或者,如果您喜欢 lambda:

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 的功能。这是一个非常 高性能的库。一个好的开始是 JacksonInFiveMinutes .

关于java - 使用 Play Framework 和 Java 解析 Json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030383/

相关文章:

java - 如何扫描 ArrayList 索引中的整数数量

php - 格式化关联数组声明

arrays - [1 2 .. N] 排列的最长递增子序列

json - aws athena - 通过 json 对象数组创建表

c# - 使用未知属性名称在 JSON.NET 中解析 JSON

java - 为什么 jmap -histo 的结果与 jmap -dump 不同

java - MQ Client 与 Python 一起使用,无需安装

javascript - 在 JavaScript 中将对象键与新数组中的累积值分组

javascript - 无法使用 jQuery 查询 JSON

java - 具有多个客户端的中央身份验证服务器,使用资源所有者密码凭据 oauth 流程