trying test setup run please parser online instalar from before array argjson again json jq

test - Usando jq para analizar y mostrar mĂșltiples campos en un json en serie



json filter online (6)

Esto producirá una variedad de nombres

> jq ''[ .users[] | (.first + " " + .last) ]'' ~/test.json [ "Stevie Wonder", "Michael Jackson" ]

Tengo este json

{ "users": [ { "first": "Stevie", "last": "Wonder" }, { "first": "Michael", "last": "Jackson" } ] }

Usando jq me gustaría mostrar el nombre y el apellido en serie. Al igual que -

Stevie Wonder Michael Jackson

Así de lejos he llegado.

jq ''.users[].first, .users[].last''

Pero muestra

"Stevie" "Michael" "Wonder" "Jackson"

Observe lo siguiente:

  1. Las comillas dobles que no quiero.
  2. El retorno de carro que no quiero.
  3. Está revuelto. Mi consulta muestra primero todos los nombres y luego todos los apellidos. Sin embargo, quiero el primero, el último, el último par.

Me acerqué bastante a lo que quería haciendo algo como esto

jq ''.users[]|.first,.last'' | paste - -

La salida de la cual está lo suficientemente cerca de yaml para que yo pueda importarlo a otras herramientas sin mucho problema. (Todavía estoy buscando una manera de exportar básicamente un subconjunto de la entrada json)


Puede usar la addition para concatenar cadenas.

Las cadenas se agregan uniéndose en una cadena más grande.

jq ''.users[] | .first + " " + .last''


Recomiendo usar la interpolación de cadenas:

jq ''.users[] | "/(.first) /(.last)"''

reference


Si bien las dos respuestas anteriores funcionan bien si la clave, el valor son cadenas, tuve la situación de agregar una cadena y un entero (errores jq usando las expresiones anteriores)

Requisito: construir una url debajo de json

pradeep@seleniumframework>curl http://192.168.99.103:8500/v1/catalog/service/apache-443 | jq .[0] % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 251 100 251 0 0 155k 0 --:--:-- --:--:-- --:--:-- 245k { "Node": "myconsul", "Address": "192.168.99.103", "ServiceID": "4ce41e90ede4:compassionate_wozniak:443", "ServiceName": "apache-443", "ServiceTags": [], "ServiceAddress": "", "ServicePort": 1443, "ServiceEnableTagOverride": false, "CreateIndex": 45, "ModifyIndex": 45 }

Solución:

curl http://192.168.99.103:8500/v1/catalog/service/apache-443 | jq ''.[0] | "http://" + .Address + ":" + "/(.ServicePort)"''


cat my.json | jq ''.my.prefix[] | .primary_key + ":", (.sub.prefix[] | " - " + .sub_key)'' | tr -d ''"''