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.
Puede usar la suma para concatenar cadenas.
Lo anterior funciona cuando ambos
first
ylast
son cadena. Si está extrayendo diferentes tipos de datos (número y cadena), entonces necesitamos convertir a tipos equivalentes. Refiriéndose a la solución a esta pregunta . Por ejemplo.fuente
" "
a un número. La respuesta de Eric da un mejor resultado para este caso.(.numA|tostring) + " " + (.numB|tostring)
debería funcionar. O la interpolación uso de cadenas en lugar:"\(.numA) \(.numB)"
.jq '.users[] | .first + " " + .last'
, funcionó muy bien, pero causó una nueva línea entre el valor de.first
y.last
. Cambié el" "
a"@"
y luego hice unsed 's/@/ /g'
en la salida para obtener "John Smith" como salida. Algo así:jq '.users[] | .first + "@" + .last' | sed 's/@/ /g'
fuente
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
Solución:
fuente
\(...)
es la interpolación de cadenas. Aquí se convierte numérico.ServicePort
en cadena. La interpolación podría usarse en lugar de los+
signos para acortar esta solución.Esto producirá una variedad de nombres
fuente
Me acerqué bastante a lo que quería haciendo algo como esto
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)
fuente
mi enfoque será (su ejemplo de json no está bien formado ... supongo que es solo una muestra)
devuelve algo como esto
y grep la salida con expresión regular.
fuente