У меня есть данные, которые выглядят так:
{
"Object0" : {
"data01" : "value01",
"data02" : "value02",
"data03" : "value03",
"data04" : "value04"
},
"Object1" : {
"data11" : "value11",
"data12" : "value12",
"data13" : "value13",
"data14" : "value14"
},
"variables": {
"variable1": {
"isSecret": null,
"value": "value1"
},
"variable2": {
"isSecret": null,
"value": "value2"
},
"variable3": {
"isSecret": null,
"value": "value3"
},
"variable4": {
"isSecret": null,
"value": "value4"
}
}
}
Я пытаюсь получить имена переменных и значения, используя jq. Мне нужен вывод, который связывает их вместе в любой форме структурированных данных. Что-то, что будет выглядеть/функционировать похоже на:
varible1,value1
varible2,value2
varible3,value3
varible4,value4
Это может быть json, csv или tsv. Все, что у вас есть, прекрасно.
Прямо сейчас я могу получить имена переменных только с помощью:
$ cat data.json | jq -r '.variables | keys[]'
variable1
variable2
variable3
variable4
Я также смог начать создавать пары ключ/значение json с помощью:
$ cat data.json | jq -r '{(.variables | keys[]):"42"}'
{
"variable1": "42"
}
{
"variable2": "42"
}
{
"variable3": "42"
}
{
"variable4": "42"
}
Но я все еще не могу получить доступ к этим сладким значениям.
Я читал справочные страницы и пробовал использовать recurse, walk, foreach, рекурсивный спуск и некоторые другие. Я не понимал, насколько надежен jq! Теперь это одна из моих любимых утилит bash. Но у меня все еще есть эта проблема. Может кто-нибудь пролить некоторый свет на это?
Использование to_entries
:
jq -r '.variables | to_entries[] | [ .key, .value.value ] | @csv'
Использование keys
:
jq -r '.variables | keys[] as $k | [ $k, .[$k].value ] | @csv'