J'essaye d'obtenir que jq
analyse une structure JSON comme:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
Autrement dit, un élément dans le JSON est une chaîne avec json échappé.
Donc, j'ai quelque chose comme $ jq [.c] myFile.json | jq [.id]
Mais cela se bloque avec jq: error: Cannot index string with string
En effet, la sortie de .c est une chaîne, pas plus JSON. Comment obtenir jq pour analyser cette chaîne?
Ma solution initiale consiste à utiliser sed pour remplacer tous les caractères d'échappement (\":\"
, \",\"
et \"
) mais c'est désordonné, je suppose qu'il existe un moyen intégré à jq
pour le faire?
Merci!
edit: De plus, la version jq disponible ici est:
$ jq --version
jq version 1.3
Je suppose que je pourrais le mettre à jour si nécessaire.
jq a le fromjson
intégré pour cela:
jq '.c | fromjson | .id' myFile.json
fromjson
a été ajouté dans la version 1.4.
Vous pouvez utiliser la sortie brute (-r) qui déséchappera les caractères:
jq -r .c myfile.json | jq .id
ADDENDUM: Cela a l'avantage de fonctionner en jq 1.3 et supérieur; en effet, cela devrait fonctionner dans toutes les versions de jq qui ont l'option -r.