能否使用JSONPath同时过滤数据并筛选保留指定属性生成结果?
能否用JSONPath同时实现数据过滤与指定属性选择?
可以实现,不过具体语法要根据你使用的JSONPath工具版本来定,主流的现代JSONPath实现(比如Jayway JsonPath、JSONPath Plus)都支持构造新对象的语法,能同时完成过滤和保留指定属性的需求。
先回顾你的示例JSON数据:
{ "firstName": "John", "lastName": "doe", "age": 26, "address": { "streetAddress": "naist street", "city": "Nara", "postalCode": "630-0192" }, "phoneNumbers": [ { "type": "iPhone", "number": "0123-4567-8888" }, { "type": "home", "number": "0123-4567-8910" } ] }
1. 使用Jayway JsonPath(Java生态常用)
使用以下表达式可以直接生成包含number属性的对象数组:
$.phoneNumbers[?(@.type == 'iPhone')].{number: @.number}
执行后得到的结果就是你想要的:
[ { "number": "0123-4567-8888" } ]
2. 使用JSONPath Plus(JavaScript生态常用)
对应的表达式为:
$..phoneNumbers[?(@.type == 'iPhone')].{number: @.number}
执行后同样会输出目标结果。
注意事项
一些早期的基础JSONPath实现(比如原始的Stefan Goessner版本)不支持构造新对象的语法,这类情况下只能先过滤出符合条件的完整对象,再通过后续代码逻辑提取指定属性来构造目标结构。但目前大多数主流工具库都已经支持上述构造语法。
内容的提问来源于stack exchange,提问作者Inx51
相关产品推荐
相关产品推荐

