json в CSV выпуск с использованием JQ - PullRequest
1 голос
/ 07 марта 2020

Я использую jq для преобразования ниже json в CSV согласно моей необходимости

my json is:

{
    "id": 39,
    "max_x": null,
    "max_y": null,
    "min_x": null,
    "min_y": null,
    "name": "L1",
    "space_count": 159,
    "spaces": [
               {
            "account_name": "Westpac",
            "ext_ids": [
                "5d6043ce3b1a6903ba000021",
                "5d6043ce3b1a6903ba000022"
            ],
            "gla": 232,
            "gross_rent": 493565.04000000004,
            "id": 8955,
            "lease_end_time": "2021-09-15T00:00:00.000Z",
            "map_unit_no": "GD030A",
            "mat_excl_gst": 0,
            "mat_growth_rate": null,
            "mat_month": "January-2020",
            "net_rent": 337459.2,
            "unit_no": "030A",
            "vertices": [
            ]
        }
    ],
    "svg": null
}

Я пытаюсь преобразовать в CSV Используя этот код в терминал:

cat data1.json | jq -r '.spaces[] | [.account_name,.ext_ids[]] | @csv' | tr -d '"' >> output.csv

результат:

Westpac,5d6043ce3b1a6903ba000021,5d6043ce3b1a6903ba000022

Но мне нужен этот результат:

Westpac,5d6043ce3b1a6903ba000021
Westpac,5d6043ce3b1a6903ba000022

Не могли бы вы мне помочь?

1 Ответ

1 голос
/ 07 марта 2020

Ниже приведено краткое объяснение руководства JQ о том, почему это происходит.

выражение [1,2,3] не использует встроенный синтаксис для массивов, разделенных запятыми, а вместо этого применяет * Оператор 1005 * (сбор результатов) для выражения 1,2,3 (который дает три разных результата).

Используя переменную, вы можете обойти эту проблему.

.spaces[] | .ext_ids[] as $e | [.account_name, $e] | @csv
...