recorrer objetos objeto metodos lista eliminar elemento crear buscar array agregar json bash jq

json - metodos - Seleccionar objetos basados en el valor de la variable en el objeto usando jq



recorrer array de objetos javascript (3)

Después de buscar en Google principalmente cosas de jQuery, encontré una publicación en el blog con la respuesta:

$ jq ''.[] | select(.location=="Stockholm")'' json { "location": "Stockholm", "name": "Walt" } { "location": "Stockholm", "name": "Donald" }

Desde aquí: http://zerokspot.com/weblog/2013/07/18/processing-json-with-jq/

Tengo el siguiente archivo json:

{ "FOO": { "name": "Donald", "location": "Stockholm" }, "BAR": { "name": "Walt", "location": "Stockholm" }, "BAZ": { "name": "Jack", "location": "Whereever" } }

Estoy usando jq y quiero obtener los elementos de "nombre" de los objetos donde "ubicación" es "Estocolmo".

Sé que puedo obtener todos los nombres por

cat json | jq .[] | jq ."name" "Jack" "Walt" "Donald"

Pero no puedo entender cómo imprimir solo ciertos objetos, dado el valor de una clave secundaria (aquí "location" : "Stockholm" ).


Para obtener una secuencia de solo los nombres:

$ jq ''.[] | select(.location=="Stockholm") | .name'' json

produce:

"Donald" "Walt"

Para obtener una secuencia de pares correspondientes (nombre de clave, atributo de "nombre"), considere:

$ jq -c ''to_entries[] | select (.value.location == "Stockholm") | [.key, .value.name]'' json

Salida:

["FOO","Donald"] ["BAR","Walt"]


Tenía una pregunta similar relacionada: ¿Qué pasaría si quisiera recuperar el formato del objeto original (con los nombres de las teclas, por ejemplo, FOO, BAR)?

Jq proporciona to_entries y from_entries para convertir objetos y matrices de pares clave-valor. Eso junto con el map alrededor del seleccionado

Estas funciones se convierten entre un objeto y una matriz de pares clave-valor. Si to_entries se pasa un objeto, entonces para cada entrada k: v en la entrada, la matriz de salida incluye {"clave": k, "valor": v}.

from_entries hace la conversión opuesta, y with_entries (foo) es una abreviatura de to_entries | mapa (foo) | from_entries, útil para realizar alguna operación a todas las claves y valores de un objeto. from_entries acepta clave, clave, nombre, nombre, valor y valor como claves.

jq15 < json ''to_entries | map(select(.value.location=="Stockholm")) | from_entries'' { "FOO": { "name": "Donald", "location": "Stockholm" }, "BAR": { "name": "Walt", "location": "Stockholm" } }

Usando la taquigrafía with_entries , esto se convierte en:

jq15 < json ''with_entries(select(.value.location=="Stockholm"))'' { "FOO": { "name": "Donald", "location": "Stockholm" }, "BAR": { "name": "Walt", "location": "Stockholm" } }