jq:从两个记录级别中取消记录和混合字段

时间:2016-04-01 19:59:13

标签: json jq

我有以下文件:

[
    {
        'id': 1,
        'arr': [{'x': 1,
                {'x': 2}]
    },
    {
        'id': 2,
        'arr': [{'x': 3},
                {'x': 4}]
    }
]

如何使用jq将其转换为以下形式?

[
    {'id': 1, 'x': 1},
    {'id': 1, 'x': 2},
    {'id': 2, 'x': 3},
    {'id': 2, 'x': 4},
]

2 个答案:

答案 0 :(得分:1)

假设它没有比这更复杂,你可以简单地这样做:

map(del(.arr) + .arr[])

假设您使用arr中的项目内容替换每个对象的arr属性。目前还不清楚你正在努力做些什么。

答案 1 :(得分:0)

问题中显示的输入无效JSON。在进行一些小的更改以使其成为有效的JSON之后,以下过滤器将生成输出,如下所示:

map( (.arr[]|.x) as $x | {id, "x": $x} )

输出:

[
  {
    "id": 1,
    "x": 1
  },
  {
    "id": 1,
    "x": 2
  },
  {
    "id": 2,
    "x": 3
  },
  {
    "id": 2,
    "x": 4
  }
]