Надеюсь, у всех все хорошо.
Я борюсь с JQ, пытаясь выбрать массив значений строк из входного json, используя определенные клавиши для выбора.«Ключ»: [«string1», ..., «stringn»] может быть вставлен «где-то» на любую глубину в json.Я знаю только значения ключей массивов.
Допустим, у меня есть некоторый json, который включает ключи dictionnay (dict) и источник json (source).В этом примере я хотел бы выбрать массивы "key4" и "key11" и получить их в результате json с соответствующими ключами.
Мой пример ввода:
{
"dict": ["key4", "key11"],
"source":{
"key0": {
"key1": "valueA",
"key2": 123456,
"key3": [{
"key4": ["anotherValue4341", "anotherValue4342"],
"key5": [{
"someKey351": "someValue351"
}, {
"someKey352": "someValue352"
}],
"key6": 999
},
{
"key7": "anotherValue342",
"key8": "anotherValue352",
"key9": 666
}
],
"key10": {
"key11": ["lastvalue111", "lastvalue112", "lastvalue113"]
}
}
}}
мой ожидаемый результат для этого образца будет:
{
"key4": ["anotherValue4341", "anotherValue4342"],
"key11": ["lastvalue111", "lastvalue112", "lastvalue113"]
}
Я использую JQ для извлечения запрошенного вывода.
на данный момент я попытался повторно использовать предыдущий запрос, чтобы выбрать ключ / значения, подобные этому:
jq '.dict as $dict | .source | reduce paths as $p (.;getpath($p) as $v| if $v|type == "string" and $dict[$v] then setpath($p; $dict[$v]) else . end)'
, но, похоже, он борется с некоторыми значениями: jq: error (at: 26): Невозможно индексировать массив строкой «valueA»
Я также пытался выбрать подходящие объектыон содержит ключи в dict:
jq '.dict as $dict | .source | recurse(.[]?) | objects | select(in($dict))'
, но это приводит к ошибке «Невозможно проверить, есть ли у массива ключ объекта»
Надеюсь, я достаточно ясен, чтобы объяснить свои потребности / проблемы.
Любые советы приветствуются.