json - jq:根据来自外部文件的映射插入值
问题描述
我想知道如何通过命令行 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
?提前致谢!
解决方案
假设文本文件在 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")
用于拆分整个文件而产生的任何空字符串。
推荐阅读
- javascript - 如何将图像 url 从 firebase 显示到 html 表中?
- sql - 使用上一行的值和下一行的值计算平均值
- android - 安卓服务是否会因为从不安全的网络从 Play 商店下载应用程序而被黑客入侵
- java - 在 Java 中锁定文件通道时出现 OverlappingFileLockException
- javascript - img.onload 在新的 Image() 声明后拒绝触发
- asp.net-core - 如何使用 Swashbuckle.AspNetCore v5.0.0-rc2 记录 API 密钥身份验证
- c++ - 将子变量传递给父构造函数
- apache-spark - 火花高阶函数变换输出结构
- c# - 打开 xml 2.5 查找具有特定字段代码的特定占位符。C#
- sql - 如何使用 linq 从数据库中检索数据?