java - 通过使用 Jackson API 动态发送 key 来检索 JSON 字符串中的值?

标签 java json jackson

我有一个像这样的 json 字符串

{
  "profile":{
    "personalInfo":{
      "name":"Sample",
      "address":"XXX",
      "town":"YYY"
    }
  }
}

我想通过动态发送 key 来检索数据。 我可以通过直接给出 key 来检索。但我不想要这样。

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree("aboveJsonString");
JsonNode subNode = jsonNode.path("profile");

但我必须动态提供“个人资料”。我将从 api 请求中获取该参数。建议我采取什么方法?

最佳答案

当您不知道JSON Object中的键名时您可以使用 elements 迭代所有元素返回 Iterator<JsonNode> 。在你的情况下,你有两个 JSON Object s 带有一个键值对,你可以像下面这样遍历它:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;

import java.io.File;

public class JsonPathApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = JsonMapper.builder()
                .build();
        JsonNode root = mapper.readTree(jsonFile);
        JsonNode personalInfo = root.elements().next().elements().next();
        System.out.println(personalInfo);
    }
}

上面的代码打印:

{"name":"Sample","address":"XXX","town":"YYY"}

关于java - 通过使用 Jackson API 动态发送 key 来检索 JSON 字符串中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59267644/

相关文章:

java - 如何处理用户在扫描仪中输入无效类型?

java - 将 Java EE Web 应用程序部署到 Wildfly/JBoss EAP

json - 有没有办法像在 package.json 中一样在 project.json 中运行脚本?

json - Jackson 1.x 到 2.x 以及向后兼容的意义

Java:Jersey Rest 服务 URL 映射问题

java - 在 Kotlin 中记录类属性

json - 如何在 solr 6 中导入露天元数据和内容

JavaScript 循环遍历 Json 日期

java - Jackson Mixin 不适用于反序列化非默认构造函数对象

java - jackson 反序列化绕过最终领域