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"?

23
demandé sur Stephen Kennedy 2015-12-17 20:18:50

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
27
répondu Jeff Mercado 2015-12-17 17:31:57