如何在Linux环境下使用jq实现指定JSON结构转换?
使用jq实现指定JSON转换
核心思路
要实现将key1数组的每个元素与key2数组对应位置的元素用-拼接,同时保留key2不变,可通过jq的数组操作和字段赋值功能完成。
方法1:固定长度数组的直接写法
如果确定两个数组长度固定为2,可直接通过索引访问元素拼接:
jq '.key1 = [.key1[0] + "-" + .key2[0], .key1[1] + "-" + .key2[1]]' input.json
.key1 = [...]:重新赋值key1字段.key1[n] + "-" + .key2[n]:取两个数组第n位元素,用-连接
方法2:通用写法(适配任意长度数组)
如果数组长度不固定,用transpose转置数组后批量拼接:
jq '.key1 = ([.key1, .key2] | transpose | map(join("-")))' input.json
[.key1, .key2]:将两个数组打包成二维数组transpose:把二维数组转置,得到[[val1,v1], [val2,v2]]的分组结构map(join("-")):对每组元素用-拼接,生成新数组.key1 = ...:将新数组赋值给key1
示例验证
假设输入文件input.json内容为:
{ "key1": ["val1", "val2"], "key2": ["v1", "v2"] }
执行上述任意命令后,输出结果为:
{ "key1": ["val1-v1", "val2-v2"], "key2": ["v1", "v2"] }
内容的提问来源于stack exchange,提问作者Mangesh Tak
相关产品推荐
相关产品推荐

