使用 jq 使用来自另一个文件的值替换 JSON 中的值

Replacing values in JSON using values from another file with jq

我有一个包含城市名称的 json 文件,我想用另一个文件中的特定城市代码替换它们。 data.json 大致是:

{
  "Customer": {
    "CustomerName": "Customer1",
    "City": "Cityname1"
  }
}
{
  "RelevantObject": false
}
{
  "Customer": {
    "CustomerName": "Customer2",
    "City": "Cityname2"
  }
}
# {...

代码列表可以是任何最容易提供给 jq 的东西,我一直在尝试 codes.json:

{
  "Cityname1": "Code1",
  "Cityname2": "Code2" 
}

但正如我所说,任何格式都可以。希望结果:

{
  "Customer": {
    "CustomerName": "Customer1",
    "City": "Code1"
  }
}
{
  "RelevantObject": false
}
{
  "Customer": {
    "CustomerName": "Customer2",
    "City": "Code2"
  }
}

我一直在尝试用 jq --argfile codes codes.json 读取文件,但我很难在 jq 中引用 $codes.Customer.City=$codes.??

这里的好答案的关键是:

.Customer.City |= $codes[.]
jq --argfile codes codes.json 'select(.Customer?)|{(.Customer.City):$codes[.Customer.City]}' data.json | jq -n '[inputs] | add'