使用 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'
我有一个包含城市名称的 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'