[英]How to extract JSON object from JSON array using JQ
我有這種 JSON:
"[{\"domain\": \"domain.com\", \"adminEmail\": \"test@example.com\", \"ipAddress\": \"1.1.1.1\", \"admin\": \"admin\", \"package\": \"Default\", \"state\": \"Active\"},{\"domain\": \"domain2.com\", \"adminEmail\": \"test@example.com\", \"ipAddress\": \"8.8.8.8\", \"admin\": \"admin2\", \"package\": \"Default\", \"state\": \"Active\"},{\"domain\": \"domain3.com\", \"adminEmail\": \"test@domain3.com\", \"ipAddress\": \"8.8.4.4\", \"admin\": \"admin3\", \"package\": \"Default\", \"state\": \"Active\"}]"
我想提取一個具有 state“活動”的域列表。
例子:
jq 'some command' my.json
將打印:
domain.com
domain2.com
domain3.com
我嘗試的每個命令都會出現相同的錯誤:
jq: error (at test.json:1): Cannot iterate over string ("[{\"domain...)
JSON 似乎對我有效。 我觀察到的一件事是 python3 json.tool 模塊無法打印此 JSON 格式。 我不知道為什么。
我試圖避免創建一個腳本來讀取這個 JSON。我想要一些可以從命令行 pipe 讀取並打印域的工具。
jq '.[] | select(.state=="Active") | .domain' my.json
output:
domain.com
domain2.com
domain3.com
正如@Inian 指出的那樣,這里的關鍵是使用fromjson
。 把它們放在一起:
jq -r 'fromjson[] | select(.state=="Active") | .domain'
您的字符串是 JSON 編碼的 object,但隨后再次使用 JSON 對該字符串進行重新編碼。
因此,您首先需要找到一種方法來解碼 JSON,並將其結果 output 返回到一個新文件中。
要用 jq 做到這一點:
jq -r input1.json > input2.json
現在你的input2.json
是一個普通的 json 文件,你可以正常執行 jq 命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.