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 路径中包含该名称。
我想你想获得 data
的 first 属性的 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 库,无论您使用什么语言)然后您将应用您自己的定义首先到该结构。
收到如下 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 路径中包含该名称。
我想你想获得 data
的 first 属性的 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 库,无论您使用什么语言)然后您将应用您自己的定义首先到该结构。