我可以使用 jq 来使用 JSON 文件中的参数来过滤和修改另一个 JSON 文件吗?
Can I use jq for using parameters from a JSON file to filter and modify another JSON file?
假设我有两个输入 JSON 文件。第一个是:
[
{
"name": "one",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"keyB": "15",
"keyC": "20"
}
]
第二个:
{
"name": "one",
"type": "FeatureCollection",
"features": [
{
"name": "one",
"valueA": "0",
"valueB" : "0"
},
{
"name": "two",
"valueA": "11",
"valueB": "21"
},
{
"name": "one",
"valueA": "21",
"valueB": "30"
},
{
"name": "two",
"valueA": "1",
"valueB": "2"
},
{
"name": "one",
"valueA": "2",
"valueB": "3"
},
{
"name": "two",
"valueA": "5",
"valueB": "3"
}
]
}
我想创建一个逻辑,当第一个文件的 .[].name
等于第二个文件的 .features[].name
时,我将第一个文件的相应键连接到第二个文件(考虑到第一个文件中 .[].name
的值始终是唯一的)。所以结果如下:
{
"name": "one",
"type": "FeatureCollection",
"features": [
{
"name": "one",
"valueA": "0",
"valueB" : "0",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"valueA": "11",
"valueB": "21",
"keyB": "15",
"keyC": "20"
},
{
"name": "one",
"valueA": "21",
"valueB": "30",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"valueA": "1",
"valueB": "2",
"keyB": "15",
"keyC": "20"
},
{
"name": "one",
"valueA": "2",
"valueB": "3",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"valueA": "5",
"valueB": "3",
"keyB": "15",
"keyC": "20"
}
]
}
在此输出中,我只是检查了 name
在两个 JSON 文件中的相等位置,然后我在 name == "one"
和 [=21] 中引入了键 keyB: "2", "keyC": "3"
=] 其中 name == "two"
。有可能用jq做吗?我可以使用两个 JSON 文件,从一个文件获取参数并将其提供给另一个文件吗?
是的,把第一个保存在变量中。
INDEX(.name) as $p | inputs | .features |= map($p[.name] + .)
假设我有两个输入 JSON 文件。第一个是:
[
{
"name": "one",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"keyB": "15",
"keyC": "20"
}
]
第二个:
{
"name": "one",
"type": "FeatureCollection",
"features": [
{
"name": "one",
"valueA": "0",
"valueB" : "0"
},
{
"name": "two",
"valueA": "11",
"valueB": "21"
},
{
"name": "one",
"valueA": "21",
"valueB": "30"
},
{
"name": "two",
"valueA": "1",
"valueB": "2"
},
{
"name": "one",
"valueA": "2",
"valueB": "3"
},
{
"name": "two",
"valueA": "5",
"valueB": "3"
}
]
}
我想创建一个逻辑,当第一个文件的 .[].name
等于第二个文件的 .features[].name
时,我将第一个文件的相应键连接到第二个文件(考虑到第一个文件中 .[].name
的值始终是唯一的)。所以结果如下:
{
"name": "one",
"type": "FeatureCollection",
"features": [
{
"name": "one",
"valueA": "0",
"valueB" : "0",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"valueA": "11",
"valueB": "21",
"keyB": "15",
"keyC": "20"
},
{
"name": "one",
"valueA": "21",
"valueB": "30",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"valueA": "1",
"valueB": "2",
"keyB": "15",
"keyC": "20"
},
{
"name": "one",
"valueA": "2",
"valueB": "3",
"keyB": "2",
"keyC": "3"
},
{
"name": "two",
"valueA": "5",
"valueB": "3",
"keyB": "15",
"keyC": "20"
}
]
}
在此输出中,我只是检查了 name
在两个 JSON 文件中的相等位置,然后我在 name == "one"
和 [=21] 中引入了键 keyB: "2", "keyC": "3"
=] 其中 name == "two"
。有可能用jq做吗?我可以使用两个 JSON 文件,从一个文件获取参数并将其提供给另一个文件吗?
是的,把第一个保存在变量中。
INDEX(.name) as $p | inputs | .features |= map($p[.name] + .)