我正在尝试使用jq来"规范化" JSON,以便给定输入:
[
[
{"M":6, "C":66, "R":0.1},
{"M":6, "C":81, "R":0.9}
],
[
{"M":11, "C":94, "R":0.8},
{"M":11, "C":55, "R":0.46}
]
,
...
]
输出应该是:
[
{
"M" : 6,
"X" : [{"66" : 0.1},{"81": 0.9}]
},
{
"M" : 11,
"X" : [{"94" : 0.8},{"55": 0.46}]
},
...
]
我可以用map({M: .[0].M
提取M,但不确定如何进行
设置X
为数组映射的结果,为每个条目创建一个单元素对象,C
为键,R
为值。
map({M: .[0].M, X: map({"(.C)": .R})})
由于map(f)
被定义为[.[]|f]
,这里是Santiago的解决方案的扩展形式,并添加了一些额外的注释:
[ # compute result array from
.[] # scaning input array
| { M: .[0].M # compute M from the .M of the first element
, X: [ # compute X array from
.[] # scanning each element's objects
| {"(.C)":.R} # and constructing new {C:R} objects
]
}
]
[foreach .[] as $list ({};
{
"M": $list[0].M,
"X": [foreach $list[] as $item ({};
{"($item.C)": $item.R}
)]
}
)]