Estoy tratando de jq
analizar una estructura JSON como:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
Es decir, un elemento en JSON es una cadena con json de escape.
Entonces, tengo algo parecido a
$ jq [.c] myFile.json | jq [.id]
Pero eso choca con jq: error: Cannot index string with string
Esto se debe a que la salida de .c es una cadena, no más JSON. ¿Cómo hago para que jq analice esta cadena?
Mi solución inicial es usar sed para reemplazar todos los caracteres de escape ( \":\"
, \",\"
y \"
) pero eso es complicado, ¿supongo que hay una forma incorporada jq
para hacer esto?
¡Gracias!
editar: Además, la versión jq disponible aquí es:
$ jq --version
jq version 1.3
Supongo que podría actualizarlo si fuera necesario.
Respuestas:
jq tiene el
fromjson
incorporado para esto:jq '.c | fromjson | .id' myFile.json
fromjson
se agregó en la versión 1.4.fuente
fromjson
función no está disponible. En otras palabras, incluso si esta respuesta es interesante, no responde a la pregunta.jq 'fromjson | .' myfile
, donde myfile contiene"{\"key\":1, \"word\":\"cat\"}"
Puede usar la salida sin formato (-r) que eliminará los caracteres:
jq -r .c myfile.json | jq .id
ADENDA: Tiene la ventaja de que funciona en jq 1.3 y posteriores; de hecho, debería funcionar en todas las versiones de jq que tengan la opción -r.
fuente