You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jq技术问询:如何将分散对象值合并为单个键值对对象

使用jq将换行分隔的JSON转换为键值对对象

问题描述

你有一组换行分隔的JSON(NDJSON)输入:

{ "metadata": { "guid": "07f90eed-105d-41b2-bc20-4c20dfb51653" }, "entity": { "name": "first" } }
{ "metadata": { "guid": "da187e3a-8db9-49fd-8c05-41f29cf87f51" }, "entity": { "name": "second" } }
{ "metadata": { "guid": "6685c3af-5427-4add-8764-7b18ae3c23bb" }, "entity": { "name": "third" } }

想要转换成以entity.name为键、metadata.guid为值的单一JSON对象:

{
  "first": "07f90eed-105d-41b2-bc20-4c20dfb51653",
  "second": "da187e3a-8db9-49fd-8c05-41f29cf87f51",
  "third": "6685c3af-5427-4add-8764-7b18ae3c23bb"
}

解决方案

使用这条jq命令就能实现需求:

jq -n 'reduce inputs as $item ({}; .[$item.entity.name] = $item.metadata.guid)' input.json

命令解释

让我拆解一下每个部分的作用:

  • -n:关闭jq默认的逐行处理模式,允许我们通过inputs一次性获取所有输入的JSON对象
  • reduce inputs as $item ({}; ...):这是jq的归约操作,从空对象{}开始,遍历每一个输入的JSON对象(存为$item),逐步构建最终的结果对象
  • .[$item.entity.name] = $item.metadata.guid:核心逻辑,把当前对象的entity.name作为键,metadata.guid作为对应的值,添加到结果对象中

运行这条命令后,就能得到你期望的键值对格式JSON啦。

内容的提问来源于stack exchange,提问作者Steve Amerige

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:12:58