使用JQ 1.4将复杂的JSON(具有数组和不同的数据类型)转换为CSV

Cos*_*Cos 0 json export-to-csv jq

我有以下JSON数据:

   {
        "status": "ok",
        "ok": true,
        "data": "MFR-L",
        "stores": [{
            "name": "KOLL",
            "lat": 52.93128,
            "lng": 6.962956,
            "dist": 1,
            "x10": 1.129,
            "isOpen": true
        },
        {
            "name": "Takst",
            "lat": 52.9523773,
            "lng": 6.981644,
            "dist": 1.3,
            "x10": 1.809,
            "isOpen": false
        }]
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用JQ将其转换为平面文件,但我一直遇到各种问题,尤其是由于文件类型(“无法使用字符串索引布尔值”等)引起的。

到目前为止,这篇文章已帮助我弄平了数组的内容,如下所示:

jq -r -s 'map(.stores | map({nm: .name, lt: .lat} | [.nm, .lt])) | add [] | @csv
Run Code Online (Sandbox Code Playgroud)

我如何才能使内容在层次结构中更高以映射到数组内容?

Jef*_*ado 5

您总是可以从父对象中与子对象分离地收集所需的值,并在以后组合它们。

例如,

$ jq -r '[.data] + (.stores[] | [.name, .lat, .lng, .dist]) | @csv' input.json
Run Code Online (Sandbox Code Playgroud)

产量

"MFR-L","KOLL",52.93128,6.962956,1
"MFR-L","Takst",52.9523773,6.981644,1.3
Run Code Online (Sandbox Code Playgroud)