如何使用JQ Select将JSON的header数组转换为键值对对象
JQ 数组转键值对对象实现方法
你之前使用的{header: [.header[]]}逻辑只是遍历原数组后重新封装为数组结构,不会生成对象,正确实现转换的JQ语句如下:
{ header: (.header | map(split(": ") | {(.[0]): .[1]}) | add) }
逻辑说明
- 首先定位到待处理的
.header数组字段 - 用
map遍历数组内每一个字符串元素:- 通过
split(": ")将key: value格式的字符串按分隔符切分为两部分,例如"key1: value1"会被切为["key1", "value1"] - 动态构造单键值对对象:以切分结果的第一项为键、第二项为值
- 通过
- 用
add将遍历生成的所有单键值对对象合并为一个完整对象,赋值给外层的header字段
执行效果
用上述语句处理你提供的原始JSON,会输出完全符合预期的结果:
{ "header": { "key1": "value1", "key2": "value2", "key3": "value3" } }
兼容优化
如果你的value值本身可能包含: 字符,可以把split逻辑调整为仅从第一个匹配分隔符的位置拆分,避免切分value内容,优化后写法:
{ header: (.header | map(split(": "; 2) | {(.[0]): .[1]}) | add) }
内容的提问来源于stack exchange,提问作者Michael S
相关产品推荐
相关产品推荐

