使用JsonPath提取不均匀列表作为类型对象

问题描述 投票:0回答:1

我需要用一系列不均一的“项目”来解析json,即每个项目可能具有不同的键/结构,但是它们共享一个提供该项目类型的通用键(此处称为“ a”)。

{
  "items":[
    {"a":1, "d":2},
    {"a":2, "b":{"c":2}}
  ]
}

我想做到这一点的一种方法可能是使用类似于以下内容的方法,从路径“ $ .items”的列表中为每个“ item”选择json字符串,

List<String> jsonStrings = JsonPath.parse(json).read("$.items");

使得第一个字符串为'{“ a”:1,“ d”:2}',第二个字符串为'{“ a”:2,“ b”:{“ c”:2}}' 。这样一来,我可以继续使用JsonPath本身来询问内部位的问题。这可能吗? (上面的代码失败,因为JsonPath改为返回地图列表。)

替代解决方案可能是使用JsonPath“查询路径”(我的术语),例如,仅返回“ items”。 a = 2作为映射列表-或与每种项目类型的嵌套结构相匹配的类型化对象的列表(可能共享包含类型键作为字段的超级接口)。这可能吗?

java json jsonpath
1个回答
0
投票

$.items不起作用,因为它不是字符串列表。它是JSON对象的数组。

我不确定您要寻找的是什么,但是有几种方法可以解决它:

$.items.[*].a

将返回a的所有值。如果所有内容都为a,则可能没问题:

[1, 2]

如果要获得具有a特定值的内容,可以使用以下语法:

$.items[?(@.a == 2)]

此返回:

[
  {
    "a": 2,
    "b": {
      "c": 2
    }
  }
]

有关其他示例,请参见JSONPath Github页面。

© www.soinside.com 2019 - 2024. All rights reserved.