将JSON中的多个数组对象解析为CSV jq的JQ错误:错误(在<stdin>:734665处):无法使用字符串索引数组

时间:2017-04-19 18:09:59

标签: arrays json csv elasticsearch jq

我有来自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对象,但在此处询问某人可能更容易指出。

1 个答案:

答案 0 :(得分:1)

您可以使用(....) + (....)创建数组,然后再切换到@csv

jq -r '.buckets[] |
    (.latest.hits.hits[]._source | [."is_external",."time_ms"]) + 
    (.perf_QS_percentiles.values | [."80.0",."95.0"]) | @csv'