我有来自ElasticSearch查询的JSON结果,该查询在JSON结果中提供多个对象。
{
"buckets": [{
"perf_SP_percentiles": {
"values": {
"80.0": 0,
"95.0": 0
}
},
"perf_QS_percentiles": {
"values": {
"80.0": 12309620299487,
"95.0": 12309620299487
}
},
"latest": {
"hits": {
"total": 3256,
"max_score": null,
"hits": [{
"_source": {
"is_external": true,
"time_ms": 1492110000000
},
"sort": [
1492110000
]
}]
}
}
}]
}
我在其他人的帮助下写了下面的jq
jq -r '.buckets[].latest.hits.hits[]._source | [."is_external",."time_ms"] | @csv'
我需要将perf_QS_Percentiles添加到CSV但是收到错误。
jq -r '.buckets[].latest.hits.hits[]._source | [."is_external",."time_ms"], .buckets[].perf_QS_percentiles.values | [."80.0",."95.0"] | @csv'
我收到错误jq: error (at <stdin>:734665): Cannot index array with string
。可能是我在这里遗漏了一些东西。我正在阅读JQ手册https://stedolan.github.io/jq/manual/#Basicfilters以了解如何解析数组中的不同JSON对象,但在此处询问某人可能更容易指出。
答案 0 :(得分:1)
您可以使用(....) + (....)
创建数组,然后再切换到@csv
:
jq -r '.buckets[] |
(.latest.hits.hits[]._source | [."is_external",."time_ms"]) +
(.perf_QS_percentiles.values | [."80.0",."95.0"]) | @csv'