如何通过JSONPath从查询结果数组中获取第一个元素
问题说明
你处理的JSON结构如下:
{ "orders":{ "678238": { "orderId": 678238, "itemName": "Keyboard" }, "8723423": { "orderId": 8723423, "itemName": "Flash Drive" } } }
使用$..orderId会返回两个orderId组成的数组,尝试$..[0].orderId无法生效的核心原因:
orders字段下存储的是键值对结构的JSON对象,不是有序数组。JSON标准本身不规定对象键的遍历顺序,[0]这类位置下标仅对有序数组生效,无法直接作用在对象属性的递归查询结果上。
正确写法
根据实际使用场景二选一即可:
- 场景1:明确知道目标订单对应的键值
这是最稳定、全JSONPath实现兼容的写法,直接指定完整路径即可:
该表达式会直接返回目标值$.orders["678238"].orderId678238,不会返回多值数组,也不受解析器的属性遍历顺序影响。 - 场景2:需要取递归匹配结果集的第一个值
不要把下标写在递归通配符后面,直接对匹配到的orderId结果集取下标即可:
注意:该写法依赖JSON解析器的对象属性遍历顺序,不同解析环境可能返回不同结果,不建议在生产环境使用。$..orderId[0]
内容的提问来源于stack exchange,提问作者MAK
相关产品推荐
相关产品推荐

