如何使用JQ将JSON对象数组转换为指定键值对对象?
问题:将数组型JSON转换为指定键值对对象
需要将如下JSON数组:
[ { "key11": "value11", "key12": "value12", "key13": "value13", "key14": "value14" }, { "key21": "value21", "key22": "value22", "key23": "value23", "key24": "value24" }, { "key31": "value31", "key32": "value32", "key33": "value33", "key34": "value34" } ]
转换为以下单个键值对对象:
{ "value11": "value12", "value21": "value22", "value31": "value32" }
解决方案:使用JQ命令
可以通过两种简洁的JQ命令实现转换:
方法1:使用reduce遍历合并
jq 'reduce .[] as $item ({}; . + { ($item[($item|keys[0])]): $item[($item|keys[1])] })'
逻辑说明:
- 用
reduce遍历数组中的每个对象$item - 初始构建一个空对象
{} - 对每个对象,取第一个键对应的值作为新键,第二个键对应的值作为新值,合并到结果对象中
方法2:使用map+from_entries
jq 'from_entries(map({key: .[keys[0]], value: .[keys[1]]}))'
逻辑说明:
map遍历数组,将每个子对象转换为{key: ..., value: ...}的标准条目结构from_entries将这些条目结构转换为单个键值对对象
以上两种命令均可将输入的JSON数组转换为目标结构,直接在终端或支持JQ的环境中运行即可。
内容的提问来源于stack exchange,提问作者1fexd
相关产品推荐
相关产品推荐

