如何使用jq将独立key:value映射合并为单个映射?
使用jq将独立JSON对象转换为逗号分隔格式
我有如下两个独立的JSON对象:
{ "Key1": "value1", "Key2": "value2", "Key3": "value3", "Key4": "value4" } { "Key1": "value1", "Key2": "value2", "Key3": "value3", "Key4": "value4" }
需要将其转换为用逗号分隔的格式:
{ "Key1": "value1", "Key2": "value2", "Key3": "value3", "Key4": "value4" }, { "Key1": "value1", "Key2": "value2", "Key3": "value3", "Key4": "value4" }
解决方案
以下是几种可行的命令行方法:
方法1:数组中转移除括号
先将所有JSON对象收集为数组,再移除数组首尾的括号:
jq -n '[inputs]' input.json | sed 's/^\[\(.*\)\]$/\1/'
jq -n '[inputs]':读取所有输入的JSON对象,包装成一个JSON数组sed 's/^\[\(.*\)\]$/\1/':删除数组开头的[和结尾的],得到逗号分隔的对象列表
方法2:压缩拼接后格式化
先把每个对象压缩为单行,用逗号拼接后再重新格式化:
jq -c '.' input.json | paste -sd ',' - | jq '.'
jq -c '.':将每个JSON对象压缩成单行输出paste -sd ',' -:把所有单行对象用逗号连接jq '.':将拼接后的内容重新格式化为易读的JSON格式
方法3:awk插入分隔符
直接处理原始格式化内容,在对象之间插入逗号:
jq '.' input.json | awk 'BEGIN{prev=0} /^{$/{if(prev==1) print ","; prev=1} 1'
- 当检测到每个对象的起始行
{时,若不是第一个对象则先输出逗号,再输出当前内容
内容的提问来源于stack exchange,提问作者surya
相关产品推荐
相关产品推荐

