Convertir une chaîne en json dans jq
Contexte
J'ai un fichier json qui contient une chaîne de json dans un objet:
{
"requestType": "POST",
"response": {
"size": 78,
"text": "{"recordID":123, "title":"Hello World", "content":"Lorem ipsum..."}"
}
}
J'ai besoin d'interpereter le contenu de la chaîne .response.text
en tant que json en utilisant l'interpereter de ligne de commande json, jq .
Quand j'exécute cette commande:
jq '.response.text | @json'
Sortie: ""{\"recordID\":123, \"title\":\"Hello World\", \"content\":\"Lorem ipsum...\"}""
J'obtiens une étrange chaîne JSON échappée au lieu de json à laquelle je peux accéder via quelque chose comme ceci: .response.text | @json | .recordID
.
Je me rends compte que la fonction @json
prendra json et afficher une chaîne échappée json, donc il doit y avoir un autre moyen, mais @text
ne semble rien faire.
Question
Est-il un moyen de convertir une chaîne de échappés json réelle json que je peux analyser avec une commande comme ceci: jq '.response.text | @json | .title'
et obtenir ce résultat: "Hello World"
?
1 réponses
Utiliser fromjson
.
Il analyse une chaîne json à sa valeur JSON appropriée. tojson
(et @json
) va dans l'autre sens et prend une valeur json et la convertit en une chaîne json.
Donc vous pouvez faire ceci:
.response.text | fromjson.title