使用jq移除JSON中含Ostermundigen的条目失败求助
使用jq移除包含指定城市的JSON条目问题
我尝试用jq工具清理JSON文件,移除所有vicinity字段包含“Ostermundigen”的条目。以下是JSON示例:
[ { "geometry": { "location": { "lat": 46.93629499999999, "lng": 7.503256800000001 } }, "name": "La Tana Del Lupo", "price_level": 1, "rating": 4.4, "types": [ "restaurant", "point_of_interest", "food", "establishment" ], "user_ratings_total": 84, "vicinity": "Dorfstrasse 11, Muri bei Bern" }, { "geometry": { "location": { "lat": 46.93406969999999, "lng": 7.503247199999999 } }, "name": "Rung Reuang", "rating": 4.8, "types": [ "restaurant", "point_of_interest", "food", "establishment" ], "user_ratings_total": 131, "vicinity": "Worbstrasse 198, Muri bei Bern" } ]
我尝试了以下几种命令,但均出现问题:
命令1:
jq 'map(del(.vicinity|contains(“Ostermundigen”)))’ Bern.json- 问题:命令一直等待用户输入,无法执行
命令2:
jq < clean_json/Bern.json 'del(.[]|select(.vicinity(has"Ostermundigen”)))’- 问题:同样等待用户输入
命令3:
jq 'del(.[]|select(.vicinity=="Ostermundigen"))' clean_json/Bern.json- 问题:出现语法错误,错误信息如下:
(base) dcha3453463$ jq 'del(.[]|select(.vicinity=="Ostermundigen")' clean_json/Bern.json jq: error: syntax error, unexpected $end, expecting ';' or ')' (Unix shell quoting issues?) at <top-level>, line 1: del(.[]|select(.vicinity=="Ostermundigen") jq: 1 compile error
- 问题:出现语法错误,错误信息如下:
错误原因分析
- 中文引号问题:所有命令中使用了中文引号
“”或’,shell和jq只能识别英文半角引号""和'',这会导致命令解析不完整,出现等待输入的情况。 - 逻辑错误:第一个命令中
map(del(.vicinity|contains(...)))的作用是删除符合条件条目的vicinity字段,而非移除整个条目,不符合需求。 - 语法错误:第二个命令中
.vicinity(has"Ostermundigen”)写法完全错误,has用于判断对象是否包含指定键,不能用来判断字符串包含;第三个命令中select的括号未闭合,缺少一个),同时用==只能匹配完全等于“Ostermundigen”的条目,无法匹配包含该字符串的情况。
正确命令
方法1:用map过滤(逻辑更清晰,推荐)
jq 'map(select(.vicinity | contains("Ostermundigen") | not))' clean_json/Bern.json
通过map遍历数组,select筛选出vicinity不包含“Ostermundigen”的条目,contains("Ostermundigen") | not对条件取反,保留符合要求的内容。
方法2:用del删除指定条目
jq 'del(.[] | select(.vicinity | contains("Ostermundigen")))' clean_json/Bern.json
直接删除数组中vicinity包含“Ostermundigen”的元素。
额外提示
- 如果需要将清理后的内容写入新文件,可使用重定向:
jq 'map(select(.vicinity | contains("Ostermundigen") | not))' clean_json/Bern.json > cleaned_Bern.json - 确保所有引号均为英文半角,括号完全匹配。
内容的提问来源于stack exchange,提问作者milami
相关产品推荐
相关产品推荐

