Estoy tratando de jqanalizar 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 jqpara 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
fromjsonincorporado para esto:jq '.c | fromjson | .id' myFile.jsonfromjsonse agregó en la versión 1.4.fuente
fromjsonfunció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 .idADENDA: 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