如何使用JQ将异构JSON对象合并为符合要求的单个数组?
解答
首先需要说明:你给出的期望输出本身不符合标准JSON语法规范,JSON数组中不允许直接存放键值对结构,仅支持存放值类型或者对象/数组。以下分别给出适配你要求的非标准格式输出方案,以及符合JSON规范的输出方案:
方案1:输出你要求的非标准格式
使用如下jq命令即可得到你给出的输出样式,同时会自动将b的值从字符串转为数字类型:
jq '[to_entries[] | .value | to_entries[] | {k:.key, v: if (.value | type) == "array" then .value[] else (.value | tonumber? // .) end} | "\"\(.k)\": \(.v | tojson)" ]'
输出结果:
[ "a": "A", "b": 123, "c": "C1", "c": "C2" ]
方案2:输出符合JSON规范的结构(推荐)
如果需要输出合法JSON,可以生成由单个键值对对象组成的数组,命令如下:
jq '[to_entries[] | .value | to_entries[] | {k:.key, v: if (.value | type) == "array" then .value[] else (.value | tonumber? // .) end} | {(.k): .v} ]'
输出结果:
[ {"a": "A"}, {"b": 123}, {"c": "C1"}, {"c": "C2"} ]
内容的提问来源于stack exchange,提问作者lbj-ub
相关产品推荐
相关产品推荐

