You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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
      

错误原因分析

  1. 中文引号问题:所有命令中使用了中文引号“”或’,shell和jq只能识别英文半角引号""和'',这会导致命令解析不完整,出现等待输入的情况。
  2. 逻辑错误:第一个命令中map(del(.vicinity|contains(...)))的作用是删除符合条件条目的vicinity字段,而非移除整个条目,不符合需求。
  3. 语法错误:第二个命令中.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:01:08