如何编写二维JSON数组表达式并提取指定stype的rid
一、二维JSON数组的JPath表达式编写
- 定位二维数组:通过层级路径直接定位,比如顶层的二维数组
Data,用$.Data即可;若嵌套在其他对象下,格式为$.父对象.子对象.Data。 - 访问具体元素:
- 取某一行:
$.Data[0](获取第一行数组,索引从0开始) - 取某一行的某一列:
$.Data[0][3](获取第一行第四列的元素) - 遍历所有行:
$.Data[*](匹配二维数组里的每一行) - 遍历所有行的指定列:
$.Data[*][0](获取每一行第一列的元素)
- 取某一行:
- 过滤行数据:使用
[?()]语法,@代表当前遍历的行数组,通过列索引设置判断条件,比如筛选第四列值为1182的行:$.Data[?(@[3]==1182)]
二、提取stype=1182的所有rid数据
给定JSON数据
{ "Master": "SMaster", "Field": [ "rid", "sid", "sname", "stype", "isPrimary" ], "Data": [ [150986,55,"PERF_01",1182,1], [150987,55,"PERF_01",1182,1], [150988,55,"PERF_01",1187,1] ], "ErrorCode": "0", "ErrorMsg": "", "Next": "0" }
原表达式问题分析
你尝试的$..[?(@.data[*][2]==1182)].data[0][0]存在三个问题:
- JSON中的键是大写
Data,不是小写data; - 条件判断逻辑错误:
@.data[*][2]无法正确指向行内的stype字段,stype对应Field的第4个元素,索引为3; - 仅提取了第一行的rid,未遍历所有符合条件的行。
正确JPath表达式
$.Data[?(@[3]==1182)][*][0]
- 逻辑说明:
$.Data定位到目标二维数组;[?(@[3]==1182)]筛选出stype(索引3)值为1182的行;[*][0]提取这些行中rid对应的索引0的元素。
执行后将得到结果:[150986, 150987]
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

