如何通过JSON Path从JSON字符串中获取JSON节点值?
嘿,我来帮你搞定用JSON Path从你的JSON里提取节点值的事儿!先把你的JSON结构贴出来方便参考(最后那个"Eternal Flame"的对象虽然没写完,但咱们就用已有的内容举例):
{ "squadName": "Super hero squad", "homeTown": "Metro City", "formed": 2016, "secretBase": "Super tower", "active": true, "members": [ { "name": "Molecule Man", "age": 29, "secretIdentity": "Dan Jukes", "powers": [ "Radiation resistance", "Turning tiny", "Radiation blast" ] }, { "name": "Madame Uppercut", "age": 39, "secretIdentity": "Jane Wilson", "powers": [ "Million tonne punch", "Damage resistance", "Superhuman reflexes" ] }, { "name": "Eternal Flame", "age": 1000000, "...": "..." } ] }
基础JSON Path语法快速梳理
先给你几个核心规则,记牢了基本就能搞定大部分场景:
$代表整个JSON的根节点.用来直接访问子节点(比如$.squadName就是根下的squadName属性)[]用来定位数组元素,索引从0开始(比如$.members[0]就是第一个成员)*是通配符,匹配所有对应层级的元素?()用来过滤数组,括号里写筛选条件
针对你的JSON的常用查询示例
下面结合你的数据给你举几个实用的例子:
1. 获取顶层属性值
- 取小队名称:
$.squadName→ 返回结果:"Super hero squad" - 取成立年份:
$.formed→ 返回结果:2016 - 取是否处于活跃状态:
$.active→ 返回结果:true
2. 访问数组中的单个元素
- 取第一个成员的完整信息:
$.members[0]→ 返回Molecule Man的整个对象 - 取第二个成员的年龄:
$.members[1].age→ 返回结果:39 - 取第一个成员的第二个超能力:
$.members[0].powers[1]→ 返回结果:"Turning tiny"
3. 批量获取数组中同类型属性
- 取所有成员的名字:
$.members[*].name→ 返回数组:["Molecule Man", "Madame Uppercut", "Eternal Flame"] - 取所有成员的所有超能力(平级展开):
$.members[*].powers[*]→ 返回所有超能力的集合数组
4. 过滤数组元素(按条件筛选)
- 筛选年龄大于30的成员:
$.members[?(@.age > 30)]→ 返回Madame Uppercut和Eternal Flame的对象 - 筛选拥有"Damage resistance"超能力的成员:
$.members[?(@.powers includes 'Damage resistance')]→ 返回Madame Uppercut的对象
注意:不同JSON Path的实现工具,过滤语法可能略有差异,比如有些工具用
contains代替includes,使用前可以查一下对应工具的文档哦
如果还有更复杂的查询需求,比如嵌套过滤、正则匹配之类的,也可以根据基础语法拓展,不过上面这些应该能覆盖大部分日常场景啦~
内容的提问来源于stack exchange,提问作者Srinivasan Ramu
相关产品推荐
相关产品推荐

