如何修复jq展平JSON数组的重复输出 [英] How to fix duplicated output of jq flattening JSON array
问题描述
我正在尝试使用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并提出建议.
每个.[]就像一个"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对象,尽管其中的第二个与您提供的预期输出稍有不同.
I am trying to flatten a JSON file by using jq command. But the output got duplicated.
Please see my jqplay here: https://jqplay.org/s/gwvMIH_fed
My input 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"
}
]
}
My expected output:
{
"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
}
Could anyone please have a look at the provided jqplay URL and advise.
Each .[] is like a "for" loop, so the multiplicative behavior you observe is essentially the result of having nested for loops. It would seem that what you want is closer to:
.value[] as $v
| $v.timeseries[].data[] as $d
| {"apiId": $v.id,
"metrics": $v.name.value,
"timestamp": $d.timeStamp,
"value": $d.average }
With your JSON as input, this produces two JSON objects, though the second of these differs very slightly from what you give as the expected output.
这篇关于如何修复jq展平JSON数组的重复输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!