如何使用jq提取JSON中uri字段不以/themes开头的字典
问题原因
原命令的筛选逻辑存在路径写法错误:
- 当你用
.[]遍历拿到数组内的每个字典条目后,当前迭代的上下文就是单个字典对象本身,不需要再加[]做二次迭代 - 原写法里的
.[].uri会在单个字典内再次递归遍历所有子属性查找uri字段,导致判断逻辑和当前遍历的条目错位,筛选条件完全失效,最终输出所有内容 - 额外加的
-r(原始输出)参数不需要保留,该参数会剥离JSON结构的格式标记,不适合输出结构化的JSON对象结果
正确命令
如果你的输入是标准JSON数组(即示例中的两个字典外层包裹[]的结构),使用如下命令:
jq '.[] | select(.uri | startswith("/themes") | not)' 输入文件路径
如果你的输入是JSON Lines格式(多个字典对象逐行存储,外层无包裹数组),去掉开头的.[]即可:
jq 'select(.uri | startswith("/themes") | not)' 输入文件路径
运行效果
使用提供的示例输入执行上述命令,将仅输出符合要求的条目,和预期结果完全一致:
{ "version": 0, "permissionMask": 2, "creationDate": "2022-06-09T14:42:43", "updateDate": "2021-11-17T06:48:48", "label": "workflow_icons_sprite@05x.png", "uri": "/internal/default/images/workflow_icons_sprite@05x.png", "resourceType": "file" }
内容的提问来源于stack exchange,提问作者ScaryAardvark
相关产品推荐
相关产品推荐

