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

使用JQ从字符串更新JSON文件字段的问题求助

问题解决:替换JSON数组中对应city字段的值

场景说明

我有一个bash变量$string,其值为abc,def,还有一个file.json文件,内容如下:

[
  {
    "loc": "51.12345, 12.12345",
    "city": "CityName1"
  },
  {
    "loc": "65.12345, 15.12345",
    "city": "CityName2"
  }
]

希望将数组中每个对象的city字段替换为$string中的对应值,得到目标结果:

[
  {
    "loc": "51.12345, 12.12345",
    "city": "abc"
  },
  {
    "loc": "65.12345, 15.12345",
    "city": "def"
  }
]

尝试了以下代码但无法正常工作:

string="abc,def"; jq --arg variable "$string" '.city = $string' file.json

解决方案

你的代码问题在于:没有把传入的字符串分割成数组,也没有和JSON数组的元素一一对应。以下两种方法可以解决:

方法一:分割字符串后按索引匹配

string="abc,def"; jq --arg s "$string" '($s | split(",")) as $cities | .[] |= .city = $cities[index]' file.json

核心逻辑:

  1. $s | split(",")把传入的字符串按逗号分割成数组["abc", "def"]
  2. 将分割后的数组赋值给变量$cities
  3. 遍历原JSON数组的每个对象,用当前元素的索引取$cities中对应的值替换city字段

方法二:转置数组配对元素(更简洁)

string="abc,def"; jq --arg s "$string" '[., ($s | split(","))] | transpose[] | .[0].city = .[1] | .[0]' file.json

核心逻辑:

  1. 把原JSON数组和分割后的城市数组合并成二维数组
  2. transpose[]将二维数组转置,得到「原对象+对应城市值」的配对
  3. 把配对中的城市值赋值给原对象的city字段,最后只保留修改后的原对象,自动重组为数组

验证结果

运行上述任意命令后,输出的JSON内容会和目标结果完全一致。

内容的提问来源于stack exchange,提问作者maria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:20:32