gpt4 book ai didi

java - 从 Java 中的一个大 JSON 中仅提取一行

转载 作者:太空宇宙 更新时间:2023-11-04 13:16:10 34 4
gpt4 key购买 nike

自从我接触 Java + JSON 的第一天起,我就尝试提取 JSON 的某些特定部分。

但无论我使用哪个库:

  • Gson
  • json-简单
  • javax.json

永远不可能让它变得又快又舒服。主要用于简单的任务甚至原型(prototype)制作。我已经花费了很多时间来尝试不同的方法。

  1. 遍历 JSON 的层次结构

    Object jsonObject = gson.fromJson(output, Object.class);
    JsonElement jsonTree = gson.toJsonTree(jsonObject);
    JsonArray commitList = jsonTree.getAsJsonArray();
    JsonElement firstElement = commitList.get(0);
    JsonObject firstElementObj = firstElement.getAsJsonObject();
    System.out.println(firstElementObj.get("sha"));
    JsonElement fileList = firstElementObj.get("files");

这是脏代码是有原因的。它显示了有多少早期方法是什么样子,以及有多少人无法实现它以便尽早做得更好。

  • JSON 反序列化为 Java 对象
    您必须分析完整的 JSON 以创建完整的 Java 对象表示形式,以便访问其中的某些单个成员。这是我从来不想用的原型(prototype)制作方式


  • JSON 是一种简单的格式。但是使用这样的库非常困难,并且对于初学者来说通常是一个问题。我通过 Google 甚至 StackOverflow 找到了几个不同的答案。但大多数都非常大,需要为整个 JSON 对象创建一个自己的特定类。

    使其对初学者更加友好的最佳方法是什么?

    最适合初学者的方法是什么?

    最佳答案

    使用 Jackson(您标记的),您可以使用 JsonPointer 表达式来浏览树对象:

        ObjectMapper mapper = new ObjectMapper();
    JsonNode tree = mapper
    .readTree("[ { \"sha\": \"foo\", \"files\": [ { \"sha\": \"bar\" }, { \"sha\": \"quux\" } ] } ]");
    System.out.println(tree.at("/0/sha").asText());
    for (JsonNode file : tree.at("/0/files")) {
    System.out.println(file.get("sha").asText());
    }

    如果您想开始使用它,您还可以使用 ObjectMapper 将树的一部分转换为模型对象:

        for (JsonNode fileNode : tree.at("/0/files")) {
    FileInfo fileInfo = mapper.convertValue(fileNode, FileInfo.class);
    System.out.println(fileInfo.sha);
    }

    如果您的目标类 (FileInfo) 指定忽略未知属性(使用 @JsonIgnoreProperties(ignoreUnknown = true) 注释目标类或在映射器上禁用 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES),那么您只需声明您感兴趣的属性即可。

    “最好”是任何能让你继续前进的东西。

    关于java - 从 Java 中的一个大 JSON 中仅提取一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504321/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com