Para o caso de uso fornecido na pergunta, a resposta do @JigglyNaga provavelmente é melhor do que isso, mas para alguma tarefa mais complicada, você também pode percorrer os itens da lista usando keys
:
de file
:
for k in $(jq '.children.values | keys | .[]' file); do
...
done
ou da string:
for k in $(jq '.children.values | keys | .[]' <<< "$MYJSONSTRING"); do
...
done
Então, por exemplo você pode usar:
for k in $(jq '.children.values | keys | .[]' file); do
value=$(jq -r ".children.values[$k]" file);
name=$(jq -r '.path.name' <<< "$value");
type=$(jq -r '.type' <<< "$value");
size=$(jq -r '.size' <<< "$value");
printf '%s\t%s\t%s\n' "$name" "$type" "$size";
done | column -t -s$'\t'
se você não tem novas linhas para os valores, pode fazê-lo com uma única chamada jq
dentro do loop, o que o torna muito mais rápido:
for k in $(jq '.children.values | keys | .[]' file); do
IFS=$'\n' read -r -d '' name type size \
<<< "$(jq -r ".children.values[$k] | .path.name,.type,.size" file)"
printf '%s\t%s\t%s\n' "$name" "$type" "$size";
done | column -t -s$'\t'