Используя Bash и jq, если у меня есть фильтр переменных Bash F формы .<key1>.<key2>...<keyN>
и я хочу нарезать объект JSON переменной Bash O , чтобы получить результаттолько этот фрагмент объекта, включая все ключи в F , как это можно сделать с помощью jq?
Например, предположим:
O='
{
"a":
{
"b":
{
"c": { "p":1 },
"x": 1
},
"x": 2
},
"x": 3
}'
Затем выполните:
F='.a.b.c'; jq -r "$F" <<<"$O"
приводит к:
{
"p": 1
}
Но я хочу, чтобы срез включал иерархию родительских ключей.
Неэффективное решение
Я нашел решение, но оно включает в себя 2 вызова jq:
F='.a.b.c'; S="$(jq -r "$F" <<<"$O"); jq --null-input -r "$F |= $S"
, что приводит к:
{
"a": {
"b": {
"c": {
"p": 1
}
}
}
}
Решение должно работать для любая допустимая O и F Переменная Bash, где O хранит объект JSON, а F является простымфильтр имен ключей только как описано выше.Например:
F='.a.b'; S="$(jq -r "$F" <<<"$O")"; jq --null-input -r "$F |= $S"
приводит к:
{
"a": {
"b": {
"c": {
"p": 1
},
"x": 1
}
}
}
Можно ли проще нарезать объект с помощью фильтра иерархии ключей в jq?