簡體   English   中英

如何使用JQ從JSON數組中提取JSON object

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

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