este problema se puede tratar de diversas formas, sin embargo te compartimos la resolución más completa en nuestra opinión.
Solución:
Si solo desea extraer el name
campos, el comando que está buscando es jq '.example."sub-example" | .[] | .name'
. Si desea mantener los nombres en un arrayenvolver todo jq
expresión entre corchetes.
En jq 1.3, puede usar el filtro para extraer los valores:
.example["sub-example"] | .[] | .name
O más compacto:
.example["sub-example"][].name
Estos, por supuesto, también funcionan con versiones posteriores de jq.
Lectura en variables de shell
En lugar de completar variables de shell separadas (lo que requeriría saber de antemano cuántos valores hay), considere completar un shell array. Por ejemplo, usando un shell bash con mapfile
(también conocido como readarray
):
mapfile -t ary < <(< json_file jq '.example."sub-example"[].name')
Alternativamente, podría usar un caparazón while
círculo. Etc etc. Hay muchos SO Q sobre este tema.
Han pasado algunos años y recientemente tuve que hacer esto yo mismo, así que pensé que debería publicar de otra manera aquí.
También puedes usar map()
para extraer campos específicos. p.ej
.example."sub-example"|map(.name)
Referencia: https://jqplay.org/s/N6TboUkELM