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:
- Las comillas dobles que no quiero.
- El retorno de carro que no quiero.
- 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''
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 ''"''