问题
I'm trying to get jq
to parse a JSON structure like:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
That is, an element in the JSON is a string with escaped json.
So, I have something along the lines of
$ jq [.c] myFile.json | jq [.id]
But that crashes with jq: error: Cannot index string with string
This is because the output of .c is a string, not more JSON. How do I get jq to parse this string?
My initial solution is to use sed to replace all the escape chars (\":\"
, \",\"
and \"
) but that's messy, I assume there's a way built into jq
to do this?
Thanks!
edit: Also, the jq version available here is:
$ jq --version
jq version 1.3
I guess I could update it if required.
回答1:
jq has the fromjson builtin for this:
jq '.c | fromjson | .id' myFile.json
fromjson
was added in version 1.4.
回答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.
来源:https://stackoverflow.com/questions/35154684/use-jq-to-parse-a-json-string