示例 input.json
[{
"organizationId": "org1",
"runtimeVersion": "3545",
"type": "rest-api",
"server": "test1",
"status": "UP"
}]
预期 output.json
[{
"organizationId": "org1",
"runtimeVersion": "3545",
"type": "rest-api",
"server": "test1",
"status": "UP",
"test1": "UP"
}]
输入是一个数组对象。我需要添加新密钥,这是密钥服务器的值。此新密钥的值应为密钥状态的值。
使用 jq
实现此目标的任何解决方案答案 0 :(得分:1)
简单 jq
方法:
jq '.[] |= . + {(.server):.status}' file.json
输出:
[
{
"organizationId": "org1",
"runtimeVersion": "3545",
"type": "rest-api",
"server": "test1",
"status": "UP",
"test1": "UP"
}
]
答案 1 :(得分:1)
本着Polya的“如何解决它”的精神,让我们首先观察一个事实,即要更新的对象是一个数组是一个分心,所以让我们专注于手头的任务:
因此,“添加”是一个值得注意的有用词,实际上在查看jq手册时,您会发现“+”和“添加”。如果。是起始对象,然后我们可以通过写:来实现更新将键值对添加到JSON对象
. + {(.server): .status}
(.server
周围的括号是必要的,因为必须评估.server
。)
上面的表达式是一个过滤器,将过滤器应用于数组的每个成员的常用方法是使用map
。这导致可能是最“基本”(如“亲爱的沃森”)解决问题的方法:
map(. + {(.server): .status})
另一种方法是使用“赋值语法”来添加(或修改)密钥,从而产生更短的解决方案:
map( .[.server] = .status )
也许这不亚于...... ...