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

如何从JSON对象流中提取并合并唯一node_id?

如何用jq提取所有唯一的node_id并合并输出?

问题背景

你手头有这样两个独立的JSON对象:

{ "name": "item1", "path": {"mapping": [ {"position": {"node_id": "1"}, "rank": "1"}, {"position": {"node_id": "2"}, "rank": "2"}, {"position": {"node_id": "3"}, "rank": "3"}, {"position": {"node_id": "6"}, "rank": "4"} ] } }
{ "name": "item2", "path": {"mapping": [ {"position": {"node_id": "1"}, "rank": "1"}, {"position": {"node_id": "5"}, "rank": "2"}, {"position": {"node_id": "3"}, "rank": "3"}, {"position": {"node_id": "4"}, "rank": "4"} ] } }

你想要提取所有不重复的node_id,不管它们属于哪个对象,最终输出成1 2 3 4 5 6这样的格式。之前尝试用[.path.mapping[].position.node_id]只能拿到每个对象各自的node_id数组,不知道怎么合并去重。

解决方案

别担心,用jq可以一步到位解决这个问题,直接运行下面的命令就行:

jq -n '[inputs.path.mapping[].position.node_id] | unique | join(" ")' your_json_file.json

拆解一下这个命令的作用:

  • -n:开启jq的"空输入模式",这样它能正确处理多个独立的JSON对象(你的输入就是两个分开的JSON)
  • [inputs.path.mapping[].position.node_id]:把所有输入JSON里的node_id全部收集到一个大数组里
  • unique:对这个大数组去重,只保留每个node_id的唯一实例
  • join(" "):把去重后的数组元素用空格连接成字符串,正好就是你要的输出格式

如果是直接在命令行里输入这两个JSON内容,也可以这么用:

echo '{ "name": "item1", "path": {"mapping": [ {"position": {"node_id": "1"}, "rank": "1"}, {"position": {"node_id": "2"}, "rank": "2"}, {"position": {"node_id": "3"}, "rank": "3"}, {"position": {"node_id": "6"}, "rank": "4"} ] } } { "name": "item2", "path": {"mapping": [ {"position": {"node_id": "1"}, "rank": "1"}, {"position": {"node_id": "5"}, "rank": "2"}, {"position": {"node_id": "3"}, "rank": "3"}, {"position": {"node_id": "4"}, "rank": "4"} ] } }' | jq -n '[inputs.path.mapping[].position.node_id] | unique | join(" ")'

亲测这个命令输出就是1 2 3 4 5 6,完全符合你的期望~

内容的提问来源于stack exchange,提问作者Lilith-Elina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:33:11