使用jq来"规范化" JSON

时间:2016-08-14 15:41:42

标签: json jq

我正在尝试使用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,但不知道如何继续

3 个答案:

答案 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}
         )]
  }
)]