Jq ссылается на индекс/ключ с его внутренними значениямиLinux

Ответить
Anonymous
 Jq ссылается на индекс/ключ с его внутренними значениями

Сообщение Anonymous »

У меня есть JSON, похожий на следующий:
Файл: my_data.json
{
"hosts": {
"1.2.3.4": { "name": "name4", "env": "test", "options": "" },
"1.2.3.5": { "name": "name5", "env": "prod", "options": "opt1,opt2" },
"1.2.3.6": { "name": "name6", "env": "qa", "options": "" },
"1.2.3.7": { "name": "name7", "env": "staging", "options": "opt3,opt4" },
"1.2.3.8": { "name": "name8", "env": "dev", "options": "opt5" },
"1.2.3.9": { "name": "name9", "env": "prod", "options": "opt6,opt7" }
}
}

Я хочу извлечь из этого файл CSV. Я попробовал несколько вариантов, найденных в Google, но ни один из них не работает. Моя цель — получить что-то вроде следующего:
"1.2.3.4","name4","test",""
"1.2.3.5","name5","prod","opt1,opt2"
"1.2.3.6","name6","dev",""
"1.2.3.7","name7","staging","opt3,opt4"
"1.2.3.8","name8","dev","opt5"
"1.2.3.9","name9","prod","opt6,opt7"

Я получил следующее, но не могу указать адрес ключа и не нашел способа его получить.
jq --raw-output '.hosts[] | [.name, .env, .options] | @csv' my_data.json

Это мой результат, но, как видно, он неполный. Как добавить ключ к каждому объекту?
"name4","test",""
"name5","prod","opt1,opt2"
"name6","qa",""
"name7","staging","opt3,opt4"
"name8","dev","opt5"
"name9","prod","opt6,opt7"

Я сделал это:
jq --raw-output '.hosts | keys_unsorted[] | [.] | @csv' my_data.json

Но при этом получаются только ключи, и я не нашел способа обратиться к объекту с помощью ключа.
"1.2.3.4"
"1.2.3.5"
"1.2.3.6"
"1.2.3.7"
"1.2.3.8"
"1.2.3.9"

Я мог бы попытаться объединить обе таблицы, но это может привести к ошибкам, и я знаю, что должен быть способ сделать это в jq, но я просто не могу найти способ.
p>
Я несколько раз искал в Google и нашел один многообещающий, но он не работает:
jq --raw-output '.hosts | keys_unsorted[] as $k | [$k, \(.[$k] | .name), \(.[$k] | .env), \(.[$k] | .options)] | @csv' my_data.json

Это возвращает ошибки компиляции:
jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at , line 1:
.hosts | keys_unsorted[] as $k | [$k, \(.[$k] | .name), \(.[$k] | .env), \(.[$k] | .options)] | @csv
jq: error: syntax error, unexpected ')', expecting $end (Unix shell quoting issues?) at , line 1:
.hosts | keys_unsorted[] as $k | [$k, \(.[$k] | .name), \(.[$k] | .env), \(.[$k] | .options)] | @csv
jq: 2 compile errors


Подробнее здесь: https://stackoverflow.com/questions/791 ... ner-values
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»