如何使用jq为JSON数组对象添加键为server值、值为status值的字段
使用jq为JSON对象动态添加字段
需求说明
我们需要处理一个JSON数组,为数组中的每个对象新增一个字段:字段名是原对象里server字段的值,字段值是原对象里status字段的值。
示例输入
[{ "organizationId": "org1", "runtimeVersion": "3545", "type": "rest-api", "server": "test1", "status": "UP" }]
期望输出
[{ "organizationId": "org1", "runtimeVersion": "3545", "type": "rest-api", "server": "test1", "status": "UP", "test1": "UP" }]
jq解决方案
可以用下面的jq命令实现这个需求:
jq 'map(. + { (.server): .status })' input.json > output.json
命令解释
map(...):遍历JSON数组中的每一个对象,对每个对象执行括号内的操作. + { (.server): .status }:.代表当前处理的对象+用于合并两个对象,把新的键值对添加到原对象中{ (.server): .status }:这是jq里的动态键名写法,括号里的.server会被求值为对应的字符串(比如示例里的test1),然后把这个字符串作为键,对应的值是.status(示例里的UP)
你可以直接把这个命令用到你的场景里,只要把input.json换成你的输入文件路径,output.json换成你想要输出的文件路径就行。如果是从标准输入读取的话,直接去掉文件名部分,用管道输入即可。
内容的提问来源于stack exchange,提问作者Naveen K Reddy
相关产品推荐
相关产品推荐

