如何使用jq合并相同SysID的JSON对象并将Name转为数组值?
用jq按SysID分组JSON对象并整理Name为数组
需求说明
现有一组多行JSON对象:
{ "SysID": "12345", "Name": "abc" } { "SysID": "12345", "Name": "def" } { "SysID": "23456", "Name": "hij" } { "SysID": "23456", "Name": "klm" } { "SysID": "23456", "Name": "nop" }
需要将这些对象按SysID字段分组,以SysID的值作为键,对应的所有Name值整理为数组,最终输出如下格式的JSON:
{ "12345": [ "abc", "def" ], "23456": [ "hij", "klm", "nop" ] }
jq实现命令
使用以下命令即可完成转换(假设原始数据保存在input.json文件中):
jq -n 'reduce inputs as $item ({}; .[$item.SysID] += [$item.Name])' input.json
命令解析
-n:指定jq以“null输入模式”运行,允许通过inputs关键字逐个读取输入中的每个独立JSON对象,而非将所有输入视为单个JSON数组。reduce inputs as $item ({}; ...):通过reduce遍历每个输入的JSON对象(赋值给变量$item),初始累加值为一个空对象{}。.[$item.SysID] += [$item.Name]:对每个对象,将其Name值添加到结果对象中以$item.SysID为键的数组内。如果该键尚未存在,jq会自动创建对应数组并添加元素。
注:jq生成的JSON不会包含示例中的尾逗号,这是符合JSON规范的标准格式。
内容的提问来源于stack exchange,提问作者joker57
相关产品推荐
相关产品推荐

