[英]how to parse a JSON String with jq (or other alternatives)?
我試圖讓jq
解析一個 JSON 結構,如:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
也就是說,JSON 中的一個元素是一個帶有轉義 json 的字符串。
所以,我有一些類似$ jq [.c] myFile.json | jq [.id]
$ jq [.c] myFile.json | jq [.id]
但這會因jq: error: Cannot index string with string
崩潰jq: error: Cannot index string with string
這是因為 .c 的輸出是一個字符串,而不是更多的 JSON。 我如何讓 jq 解析這個字符串?
我最初的解決方案是使用 sed 替換所有轉義字符( \\":\\"
、 \\",\\"
和\\"
),但這很麻煩,我認為jq
內置了一種方法可以做到這一點?
謝謝!
編輯:另外,這里可用的 jq 版本是:
$ jq --version
jq version 1.3
如果需要,我想我可以更新它。
您可以使用將取消轉義字符的原始輸出 (-r):
jq -r .c myfile.json | jq .id
附錄:它的優勢在於它適用於 jq 1.3 及更高版本; 實際上,它應該適用於每個帶有 -r 選項的 jq 版本。
動機:您想要解析 JSON 字符串 - 您想要轉義用引號包裹並表示為字符串緩沖區的 JSON 對象,並將其轉換為有效的 JSON 對象。 例如:
一些JSON 未轉義字符串:
"{\"name\":\"John Doe\",\"position\":\"developer\"}"
預期結果(一個 JSON 對象):
{"name":"John Doe","position":"developer"}
解決方案:為了轉義 JSON 字符串並將其轉換為有效的 JSON 對象,請在命令行中使用sed
工具並使用正則表達式刪除/替換特定字符:
cat current_json.txt | sed -e 's/\\\"/\"/g' -e 's/^.//g' -e 's/.$//g'
s/\\\\\\"/\\"/g
將所有反斜杠和引號 ( \\"
) 替換為僅引號 ( "
)
s/^.//g
將流中的第一個字符替換為無字符
s/.$//g
將流中的最后一個字符替換為無字符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.