JQ массив хэшей в CSV - PullRequest
0 голосов
/ 02 июля 2018

Итак, у меня есть такой источник данных:

{
  "things": [
    {
      "thing_name": "Bestco",
      "thing_id": 1
    },
    {
      "thing_name": "GreatCo",
      "thing_id": 2
    },
    {
      "thing_name": "DressCo",
      "thing_id": 3
    }
  ]
}

Я хочу получить вывод, подобный этому:

$ echo '{"things":[{"thing_name":"Bestco","thing_id":1},{"thing_name":"GreatCo","thing_id":2},{"thing_name":"DressCo","thing_id":3}]}' |
  jq -r '.things | map(.thing_name, .thing_id, "\n") | @csv' |
  sed -e 's/,"$//g' -e 's/^",//g' -e 's/^"$//g'
"Bestco",1
"GreatCo",2
"DressCo",3

$ 

Использование фальшивого параметра кажется хаком, и его нужно очистить с помощью sed для работы. Как мне сделать это только с JQ.

1 Ответ

0 голосов
/ 02 июля 2018

Вместо того, чтобы пытаться вставить буквальные символы новой строки в ваши данные, разделите данные на отдельные массивы (по одному на строку требуемого вывода) и передайте каждый из них @csv.

s='{"things":[{"thing_name":"Bestco","thing_id":1},{"thing_name":"GreatCo","thing_id":2},{"thing_name":"DressCo","thing_id":3}]}'

jq -r '.things[] | [.thing_name, .thing_id] | @csv' <<<"$s"

... правильно выбрасывает:

"Bestco",1
"GreatCo",2
"DressCo",3
...