web-dev-qa-db-fra.com

Convertir une chaîne en json en 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'interpéter le contenu du .response.text chaîne en json à l'aide de l'interpréteur de ligne de commande json, jq .

Lorsque j'exécute cette commande:

jq '.response.text | @json'

Production: "\"{\\\"recordID\\\":123, \\\"title\\\":\\\"Hello World\\\", \\\"content\\\":\\\"Lorem ipsum...\\\"}\""

Je reçois une chaîne json échappée étrange au lieu de json à laquelle je peux accéder via quelque chose comme ceci: .response.text | @json | .recordID.

Je me rends compte que le @json la fonction prendra json et produira une chaîne d'échappement json, donc il doit y avoir une autre façon, mais @text ne semble rien faire.

Question

Existe-t-il un moyen de convertir une chaîne de json échappé en json réel que je peux analyser avec une commande comme celle-ci: jq '.response.text | @json | .title' et obtenez cette sortie: "Hello World"?

28
RJ-Adam

Utilisez fromjson .

Il analyse une chaîne à sa valeur json appropriée. tojson (et @json) va dans l'autre sens et prend une valeur json et la convertit en chaîne.

Vous pouvez donc faire ceci:

.response.text | fromjson.title
37
Jeff Mercado