【问题标题】:How to fix duplicated output of jq flattening JSON array如何修复 jq 展平 JSON 数组的重复输出
【发布时间】:2019-06-25 23:19:51
【问题描述】:

我正在尝试使用 jq 命令展平 JSON 文件。但是输出重复了。

请在此处查看我的 jqplay:https://jqplay.org/s/gwvMIH_fed

我的输入 JSON:

{
  "cost": 0.0,
  "interval": "0:01:00",
  "namespace": "Microsoft.ApiManagement/service",
  "resourceregion": "australiaeast",
  "timespan": "2019-05-22T00:00:00Z/2019-05-22T00:02:00Z",
  "value": [
    {
      "id": "/my-api/providers/Microsoft.Insights/metrics/Capacity",
      "name": {
        "localizedValue": "Capacity",
        "value": "Capacity"
      },
      "resourceGroup": "my-group",
      "timeseries": [
        {
          "data": [
            {
              "average": 15,
              "count": null,
              "maximum": null,
              "minimum": null,
              "timeStamp": "2019-05-22T00:00:00+00:00",
              "total": null
            },
            {
              "average": 16,
              "count": null,
              "maximum": null,
              "minimum": null,
              "timeStamp": "2019-05-22T00:01:00+00:00",
              "total": null
            }
          ],
          "metadatavalues": []
        }
      ],
      "type": "Microsoft.Insights/metrics",
      "unit": "Percent"
    }
  ]
}

我的预期输出:

{
  "apiId": "/my-api/providers/Microsoft.Insights/metrics/Capacity",
  "metrics": "Capacity",
  "timestamp": "2019-05-22T00:00:00+00:00",
  "value": 15
}
{
  "apiId": "/my-api/providers/Microsoft.Insights/metrics/Capacity",
  "metrics": "Capacity",
  "timestamp": "2019-05-22T00:01:00+00:00",
  "value": 16
}

任何人都可以查看提供的 jqplay URL 并提供建议。

【问题讨论】:

  • 更糟糕的是,如果 values 数组中有两个项目,并且彼此之间只有一个:jqplay.org/s/0K5a0Jrnao

标签: json jq


【解决方案1】:

每个 .[] 就像一个“for”循环,因此您观察到的乘法行为本质上是嵌套 for 循环的结果。看起来你想要的更接近:

.value[] as $v
| $v.timeseries[].data[] as $d
| {"apiId": $v.id,
  "metrics": $v.name.value,
  "timestamp": $d.timeStamp,
  "value": $d.average }

使用您的 JSON 作为输入,这会生成两个 JSON 对象,尽管其中第二个与您作为预期输出提供的内容略有不同。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2021-01-28
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多