如何使用Jayway JSON Path检查字符串是否在JSON数组中并返回指定节点?
问题分析与正确JSONPath查询语句
你的错误点:
- 路径语法错误:
$.school.class.[?()]中class后面多了一个多余的点,正确的路径应该是$.school.class[?()],节点后直接跟条件判断即可,无需额外的点。 - 条件判断语法误用:
- Jayway JSON Path中,单个值匹配数组元素应该用
in关键字或contains函数,而非anyof(anyof用于判断两个数组是否存在交集,不适合单值匹配数组的场景)。 - 你写的
@.'john'是错误的节点引用方式,@代表当前的class节点,你需要检查的是该节点下的student_list数组,所以应该用@.student_list。
- Jayway JSON Path中,单个值匹配数组元素应该用
正确的查询语句
1. 精确匹配(区分大小写)
如果要严格匹配'John'(和原JSON中的大小写一致),可以用两种写法:
$.school.class[?('John' in @.student_list)]
或者:
$.school.class[?(@.student_list contains 'John')]
2. 不区分大小写匹配
如果需要忽略大小写匹配(比如输入'john'也能匹配原JSON中的'John'),可以借助Jayway的toLowerCase()函数:
$.school.class[?('john' in @.student_list.toLowerCase())]
或者:
$.school.class[?(@.student_list.toLowerCase() contains 'john')]
验证结果
使用上述正确语句查询你的示例JSON,当传入'John'(或小写'john',对应不区分大小写的语句)时,会返回完整的class节点:
{ "standard": "6", "student_list": [ "Daniel", "Jack", "John" ] }
内容的提问来源于stack exchange,提问作者user13906258
相关产品推荐
相关产品推荐

