我正在尝试让jq
解析JSON结构,如:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
也就是说,JSON中的元素是一个带有转义json的字符串。
所以,我有类似的东西
$ jq [.c] myFile.json | jq [.id]
但是这与jq: error: Cannot index string with string
这是因为.c的输出是一个字符串,而不是更多的JSON。 如何让jq解析这个字符串?
我的初始解决方案是使用sed替换所有转义字符(\":\"
,\",\"
和\"
),但这很麻烦,我认为{{1}内置了一种方法这样做?
谢谢!
编辑: 此外,这里提供的jq版本是:
jq
我想如果需要我可以更新它。
答案 0 :(得分:83)
答案 1 :(得分:29)
您可以使用将忽视字符的原始输出(-r):
jq -r .c myfile.json | jq .id
ADDENDUM:这有利于它在jq 1.3及以上版本中工作;实际上,它应该适用于具有-r选项的每个jq版本。
答案 2 :(得分:0)
动机:您想要解析 JSON 字符串 - 您想要转义用引号包裹并表示为字符串缓冲区的 JSON 对象,并将其转换为有效的 JSON 对象。例如:
一些 JSON 未转义字符串:
"{\"name\":\"John Doe\",\"position\":\"developer\"}"
预期结果(一个 JSON 对象):
{"name":"John Doe","position":"developer"}
解决方案:为了转义 JSON 字符串并将其转换为有效的 JSON 对象,请在命令行中使用 sed
工具并使用正则表达式删除/替换特定字符:< /p>
cat current_json.txt | sed -e 's/\\\"/\"/g' -e 's/^.//g' -e 's/.$//g'
s/\\\"/\"/g
将所有反斜杠和引号 ( \"
) 替换为仅引号 ("
)
s/^.//g
将流中的第一个字符替换为无字符
s/.$//g
将流中的最后一个字符替换为无字符