Convert string to json in jq

JsonCommand LineJq

Json Problem Overview


Background

I have a json file that contains a string of json within an object:

{
    "requestType": "POST",
    "response": {
        "size": 78,
        "text": "{\"recordID\":123, \"title\":\"Hello World\", \"content\":\"Lorem ipsum...\"}"
    }
}

I need to interperet the contents of the .response.text string as json using the json command line interpereter, jq.

When I run this command:

jq '.response.text | @json'

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

I get some weird escaped json string instead of json that I can access via something like this: .response.text | @json | .recordID.

I realize that the @json function will take json and output a json escaped string, so there must be another way, but @text doesn't seem to do anything.

Question

Is there some way to convert a string of escaped json to actual json that I can parse with a command such as this: jq '.response.text | @json | .title' and get this output: "Hello World"?

Json Solutions


Solution 1 - Json

Use fromjson.

It parses a string to its appropriate json value. tojson (and @json) goes the other way around and takes a json value and converts it to a string.

So you could do this:

.response.text | fromjson.title

Solution 2 - Json

You can also do this:

jq -r '.response.text' | jq '.recordID'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRJ-AdamView Question on Stackoverflow
Solution 1 - JsonJeff MercadoView Answer on Stackoverflow
Solution 2 - JsonS P Arif Sahari WibowoView Answer on Stackoverflow