使用jq转换JSON输出:合并endpoints下子数组并移除冗余键名
jq实现方案
你可以使用以下jq命令完成需求:
jq 'map(.endpoints |= ([.[]] | add))' input.json
命令说明
map(...):遍历输入的JSON数组,逐个处理每个服务对象.endpoints |= (...):对每个服务对象的endpoints字段做原地修改,新值为括号内的运算结果[.[]]:提取endpoints对象下所有键对应的数组值,组装为二维数组add:将二维数组的所有子数组合并为一个一维数组,保留原始顺序和重复元素
如果你需要对合并后的endpoints数组去重,可以使用以下变种命令:
jq 'map(.endpoints |= ([.[]] | add | unique))' input.json
输出示例
执行第一条命令后,得到的合法JSON输出如下:
[ { "serviceid": "service1", "endpoints": [ "example1", "example2", "example3", "example4", "example3", "example4", "example5", "example6" ], "version": "1.0" }, { "serviceid": "service2", "endpoints": [ "example7", "example8", "example9", "example10" ], "version": "2.0" } ]
注:你给出的期望输出存在JSON语法错误,上述输出为修正语法后的合法结果。
内容的提问来源于stack exchange,提问作者devjunix
相关产品推荐
相关产品推荐

