使用 jq "normalize" JSON

Using jq to "normalize" JSON

我正在尝试将 jq 用于 "normalize" 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 但不确定如何进行

[foreach .[] as $list ({};
  {
    "M": $list[0].M,
    "X": [foreach $list[] as $item ({};
            {"\($item.C)": $item.R}
         )]
  }
)]

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
     ]                        
  }
]