J'essaie d' jq
analyser une structure JSON comme:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
Autrement dit, un élément du JSON est une chaîne avec json échappé.
Donc, j'ai quelque chose du genre
$ jq [.c] myFile.json | jq [.id]
Mais ça plante avec jq: error: Cannot index string with string
C'est parce que la sortie de .c est une chaîne, pas plus JSON. Comment puis-je demander à jq d'analyser cette chaîne?
Ma solution initiale est d'utiliser sed pour remplacer tous les caractères d'échappement ( \":\"
, \",\"
et \"
) mais c'est compliqué, je suppose qu'il existe un moyen intégré jq
de le faire?
Merci!
edit: Aussi, la version jq disponible ici est:
$ jq --version
jq version 1.3
Je suppose que je pourrais le mettre à jour si nécessaire.
Réponses:
jq a la fonction
fromjson
intégrée pour cela:jq '.c | fromjson | .id' myFile.json
fromjson
a été ajouté dans la version 1.4.la source
fromjson
fonctionnalité n'est pas disponible. En d'autres termes, même si cette réponse est intéressante, elle ne répond pas à la question.jq 'fromjson | .' myfile
:, where myfile contains"{\"key\":1, \"word\":\"cat\"}"
Vous pouvez utiliser la sortie brute (-r) qui échappera aux caractères:
jq -r .c myfile.json | jq .id
ADDENDA: Cela a l'avantage de fonctionner dans jq 1.3 et plus; en effet, cela devrait fonctionner dans toutes les versions de jq qui ont l'option -r.
la source