我正在尝试使用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,但不知道如何继续
答案 0 :(得分:2)
将X
设置为数组映射的结果,并为每个条目创建一个元素对象,其中C
为关键字,R
为值。
map({M: .[0].M, X: map({"\(.C)": .R})})
答案 1 :(得分:0)
由于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
]
}
]
答案 2 :(得分:-2)
[foreach .[] as $list ({};
{
"M": $list[0].M,
"X": [foreach $list[] as $item ({};
{"\($item.C)": $item.R}
)]
}
)]