【问题标题】:Java JSON library that supports DOM-style access支持 DOM 样式访问的 Java JSON 库
【发布时间】:2012-11-27 13:50:37
【问题描述】:

我正在用 Java 编写一个 JSON 样式的查询引擎,它会受益于通过 DOM 路径查询 JSON 文档的能力(就像你可以在 Javascript 中做的那样)。我已经检查了 GSON 和 Jackson,但似乎都不支持这一点。

有人知道任何替代方案或其他建议而不是我自己的建议吗?

例如

//Example JSON document
String json = "{ somewhere : {deep : { inside : 123 } }, anarray : [{val=1}] }";
JsonElement root = JsonParser.parse(json);

//What I'd like:
JsonElement node = root.getByDOM("somewhere.deep");  // {inside : 123}
JsonElement node2 = root.getByDOM("somewhere.deep.inside");  // 123
JsonElement node3 = root.getByDOM("anarray[0].val");  // 1
//etc

【问题讨论】:

标签: java json jackson gson


【解决方案1】:

Jackson 绝对支持这一点(参见“Jackson in 5 minutes”,寻找“树模式”),例如:

JsonNode root = mapper.readTree(jsonSource);

我认为 GSON 也有类似的东西。

但无论您做什么,都不要尝试将 JSON 转换为 XML,然后使用 XML 工具——这种方法通常会给您带来很多麻烦,不仅速度慢。这是因为 JSON 和 XML 数据模型根本上是不兼容的。

【讨论】:

  • jackson 允许您在树中读取,但是要获取特定节点,您仍然需要执行以下操作: root.get("somewhere").get("deep") 所以你最终不得不构建解析器,该解析器必须遍历不同的级别才能找到您想要的特定节点。 GSON 也有同样的限制。
  • Jackson JsonNode 有一些查找方法(findValue 等),如果您只需要匹配名称。构建自己的功能非常容易。
【解决方案2】:

使用 json-path - 感谢 brian 的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2020-09-06
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多