how to parse a JSON String with jq (or other alternatives)?
Solution 1:
jq has the fromjson
builtin for this:
jq '.c | fromjson | .id' myFile.json
fromjson
was added in version 1.4.
Solution 2:
You can use the raw output (-r) that will unescape characters:
jq -r .c myfile.json | jq .id
ADDENDUM: This has the advantage that it works in jq 1.3 and up; indeed, it should work in every version of jq that has the -r option.
Solution 3:
Motivation: you want to parse JSON string - you want to escape a JSON object that's wrapped with quotes and represented as a String buffer, and convert it to a valid JSON object. For example:
some JSON unescaped string :
"{\"name\":\"John Doe\",\"position\":\"developer\"}"
the expected result ( a JSON object ):
{"name":"John Doe","position":"developer"}
Solution: In order to escape a JSON string and convert it into a valid JSON object use the sed
tool in command line and use regex expressions to remove/replace specific characters:
cat current_json.txt | sed -e 's/\\\"/\"/g' -e 's/^.//g' -e 's/.$//g'
s/\\\"/\"/g
replacing all backslashes and quotes ( \"
) into quotes only ("
)
s/^.//g
replacing the first character in the stream to none character
s/.$//g
replacing the last character in the stream to none character