簡體   English   中英

如何使用 jq(或其他替代方法)解析 JSON 字符串?

[英]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

如果需要,我想我可以更新它。

jq fromjson內置了fromjson

jq '.c | fromjson | .id' myFile.json

fromjson是在 1.4 版中添加的。

您可以使用將取消轉義字符的原始輸出 (-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM