Use jq to parse a JSON String

扶醉桌前 提交于 2019-12-17 23:15:33

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!