使用 jq "normalize" JSON



我正在尝试使用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}
         )]
  }
)]

最新更新