如何用JSONPath排除指定键(排除application/ld+json)
JSONPath 排除指定键获取内容的实现方案
示例JSON
{"post": {"operationId": "post-collection","responses": {"201": {"description": "Post something","content": {"application/ld+json": {"schema": {"$ref": "./models/Mapping.jsonld.json"}},"application/hal+json": {"schema": {"$ref": "./models/Mapping.jsonHal.json"}},"application/vnd.api+json": {"schema": {"$ref": "./models/Mapping.vndApi.json"}}}}}}
需求
从上述JSON的content节点下获取所有子内容,但排除application/ld+json对应的条目,仅使用基础JSONPath语法(不借助函数或额外编程),测试工具为jsonpath.com。
解决方案
提供两种符合要求的实现方式:
1. 明确列举需保留的键
如果清楚所有需要保留的键,直接在JSONPath中指定这些键即可:
$..content['application/hal+json', 'application/vnd.api+json']
这种方式通过属性列表直接选择目标内容,无特殊语法依赖,在jsonpath.com中会返回application/hal+json和application/vnd.api+json对应的两个对象。
2. 动态排除指定键
如果不确定content下的其他键,需要动态排除application/ld+json,可以利用JSONPath内置的$key变量做否定匹配:
$..content.*[?($key != 'application/ld+json')]
该表达式先选中content下的所有子节点,再过滤掉键名为application/ld+json的条目,最终返回剩余所有内容,在jsonpath.com中可正常生效。
内容的提问来源于stack exchange,提问作者PrimuS
相关产品推荐
相关产品推荐

