Eu queria usar jq para obter um valor específico b
de dois caminhos possíveis ( e apenas esses dois ). Então, basicamente, eu queria dizer
jq '(path1 OR path2) | .b'
que deve funcionar se b
estiver em um dos dois caminhos path1
ou path2
. Se ambos os caminhos tiverem b
, o primeiro caminho terá precedência.
Por exemplo, ambos
echo '{"b":2}' | jq '.b'
echo '{"a": {"b":2}}' | jq '.a.b'
extrair b
em .
e .a
.
Posso de alguma forma dizer
echo ... | jq '(MAGIC).b'
para fazê-lo funcionar para ambas as entradas acima?
O que tentei até agora é usar o operador recursivo ..
:
jq '[..|.b?|values]|first'
Isso funciona em ambos:
echo '{"b":2}' | jq '[..|.b?|values]|first'
echo '{"a": {"b":2}}' | jq '..|.b?|values|first'
dar 2
. Mas não é específico o suficiente e também permite b
estar em qualquer lugar da árvore abaixo .
. Também é difícil de ler. Além disso, pode não funcionar se os dois caminhos não estiverem relacionados entre pais e filhos.
(Isto é com jq 1.7 no Ubuntu 24.04 LTS)