我想知道如何通过命令行jq完成此任务。我组成一个具有类似嵌套结构的文件,如下所示:
{
"item": "item1",
"features": [
{
"feature": "feature_a",
"value": ""
},
{
"feature": "feature_b",
"value": ""
}
]
}
现在我还有另一个文件将feature
映射到value
:
feature_a value_1
feature_b value_2
因此,根据这些映射,我想将value
插入第一个json文件中,得到以下输出:
{
"item": "item1";
"features": [
{
"feature": "feature_a",
"value": "value_1"
},
{
"feature": "feature_b",
"value": "value_2"
}
]
}
如何通过jq
实现以上操作?
预先感谢!
答案 0 :(得分:0)
假设文本文件位于dict.txt中,而JSON文件位于source.json中,则调用
jq -Rs --argfile target source.json dict.txt '
([ split("\n")[]
| select(length>0)
| split(" ")
| { (.[0]): .[1]} ]
| add) as $dict
| $target
| .features |= map(.value = $dict[.feature])'
将产生所需的输出。
包含select(length>0)
的主要原因是跳过使用split("\n")
拆分整个文件可能导致的任何空字符串。