Почему JQ рассматривает массивы как одно поле в выводе CSV? - PullRequest
0 голосов
/ 13 марта 2020

Со следующим входным файлом:

{
  "events": [
    {
      "mydata": {
        "id": "123456",
        "account": "21234"
      }
    },
    {
      "mydata": {
        "id": "123457",
        "account": "21234"
      }
    }
  ]
}

Когда я запускаю его через этот фильтр JQ,

jq ".events[] | [.mydata.id, .mydata.account]" events.json

я получаю набор массивов:

[
  "123456",
  "21234"
]
[
  "123457",
  "21234"
]

Когда я помещаю этот вывод через фильтр @csv для создания вывода CSV:

jq ".events[] | [.mydata.id, .mydata.account] | @csv" events.json

Я получаю файл CSV с одной записью на строку:

"\"123456\",\"21234\""
"\"123457\",\"21234\""

Мне нужен CSV-файл с двумя записями в строке, например:

"123456","21234"
"123457","21234"

Что я делаю не так?

1 Ответ

3 голосов
/ 13 марта 2020

Используйте флаг -r.

Вот объяснение в руководстве :

--raw-output / -r: с этой опцией, если результат фильтра является строкой, тогда она будет записана непосредственно в стандартный вывод, а не будет отформатирована как строка JSON с кавычками.

jq -r '.events[] | [.mydata.id, .mydata.account] | @csv'

Выход

"123456","21234"
"123457","21234"
...