#json #nested #key #jq
#json #вложенный #Клавиша #jq
Вопрос:
Я пытаюсь изменить форму файла JSON с помощью JQ, и, похоже, я не могу найти правильный способ сделать это.
По сути, я пытаюсь превратить некоторые ключи в значения и реорганизовать некоторые части JSON.
Исходный JSON выглядит следующим образом :
{
"ABCC": {
"pairs": {
"CND": {
"tsyms": {
"BTC": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
},
"ETH": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
}
}
},
"ELF": {
"tsyms": {
"ETH": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
},
"BTC": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
}
}
}
}
},
"ACX": {
"pairs": {
"PLA": {
"tsyms": {
"AUD": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
},
"USDT": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
}
}
},
"BTC": {
"tsyms": {
"USDT": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
},
"AUD": {
"useless_variable1": "useless_value1",
"useless_variable2": "useless_value2"
}
}
}
}
}
}
И ожидаемый результат JSON будет примерно таким :
{
"ABCC": {
"pairs": [
"CND/BTC",
"CND/ETH",
"ELF/ETH",
"ELF/BTC"
]
},
"ACX": {
"pairs": [
"PLA/AUD",
"PLA/USDT",
"BTC/USDT",
"BTC/AUD"
]
}
}
Есть идеи, как я мог бы достичь этого результата?
Спасибо!
Ответ №1:
Ключом к простому решению является написание вспомогательной функции для извлечения ключа / ключевых строк:
# emit a stream of key1/key3 strings
def pairs:
keys_unsorted[] as $k1
| .[$k1][]
| keys_unsorted[] as $k3
| "($k1)/($k3)";
Теперь, благодаря |=
оператору jq, решение может быть записано просто как:
map_values(.pairs |= [pairs])