JSON 路径:在 object 中获得第一个 children

JSON Path: get first children in an object

收到如下 API 回复:

{
  "data": {
    "unpredictable_name_1": {
      "inner_data": [
        {
          "wanted_data": "something1",
          "other_data": 1000
        },
        {
          "wanted_data": "something2",
          "other_data": 1001
        }
      ],
      "something_else_1": "some_data"
    },
    "unpredictable_name_2": {
      "inner_data": [
        {
          "wanted_data": "something1",
          "other_data": 1000
        },
        {
          "wanted_data": "something2",
          "other_data": 1001
        }
      ]
    }
  }
}

我需要一个 JSON 路径查询只返回这个:

[
  {
    "wanted_data": "something1",
    "other_data": 1000
  },
  {
    "wanted_data": "something2",
    "other_data": 1001
  }
]

如果使用这个 $..inner_data,我得到了两个 inner_data 数组,但我发现没有办法只得到第一个。 (此处测试:https://jsonpath.curiousconcept.com/)。 $..inner_data[0] 不起作用,因为它给了我两次来自 objects.

的相同数组元素

这个...

$.data.unpredictable_name_1.inner_data

... 将 return:

[
   {
      "wanted_data" : "something1",
      "other_data" : 1000
   },
   {
      "wanted_data" : "something2",
      "other_data" : 1001
   }
]

但我怀疑您故意选择属性名称 unpredictable_name_1 来暗示您不知道该属性的名称,因此不能依赖于在 json 路径中包含该名称。

我想你想获得 datafirst 属性的 inner_data 属性的全部内容,但是由于 data 的顶级属性不是数组中的元素,它们没有第一或第二或任何位置的概念。

换句话说:unpredictable_name_1 仅在您的文档视图中位于第一个,JsonPath 没有它是 data 的第一个属性的概念,因此 JsonPath 无法在持仓基础。

相比之下,inner_data 是一个数组,因此可以按位置寻址。例如:$..inner_data[0] 将 return 每个 inner_data 属性的第一个元素。 JsonPath 可以应用位置运算符 [0] 因为 inner_data 是一个数组。

因此,JsonPath 无法执行此操作:获取 data 的第一个属性的 inner_data 属性的全部内容,因为顶级属性在data 不是数组的成员。为了从给定的 JSON 中获取数据,您需要使用 JSON 库(在 Java 中将 JSON 反序列化为某种结构(例如 Map)领域,这可能是 Gson 或 Jackson,您没有在 OP 中提及您的语言,但是有一个 JSON de/serialisation 库,无论您使用什么语言)然后您将应用您自己的定义首先到该结构。