簡體   English   中英

使用 jq 從 JSON 輸出中提取特定字段

[英]Extract a specific field from JSON output using jq

我有一個 JSON 輸出如下:

{
  "example": {
    "sub-example": [
      {
        "name": "123-345",
        "tag" : 100
      },
      {
        "name": "234-456",
        "tag" : 100
      },
      {
        "name": "4a7-a07a5",
        "tag" : 100
      }
    ]
  }
}

我想提取三個“名稱”字段的值並將其存儲在三個變量中。

我試過cat json_file | jq '.["example.sub-example.name"]' cat json_file | jq '.["example.sub-example.name"]'提取“名稱”字段的值,但這不起作用。

誰能告訴我如何使用 jq(或其他方法)來實現這一目標?

如果您只想提取name字段,您要查找的命令是jq '.example."sub-example" | .[] | .name' jq '.example."sub-example" | .[] | .name' jq '.example."sub-example" | .[] | .name' 如果要將名稱保留在數組中,請將整個jq表達式括在方括號中。

在 jq 1.3 中,您可以使用過濾器來提取值:

.example["sub-example"] | .[] | .name

或更緊湊:

.example["sub-example"][].name

這些當然也適用於更高版本的 jq。

讀入shell變量

與其填充單獨的 shell 變量(這需要事先知道有多少個值),不如考慮填充一個 shell 數組。 例如,使用帶有mapfile (又名readarray )的 bash shell:

mapfile -t ary < <(< json_file jq '.example."sub-example"[].name')

您也可以使用 shell while循環。 等等等等。關於這個話題有很多 SO Q。

已經有幾年了,我最近不得不自己做這件事,所以我想我應該在這里發布另一種方式。

您還可以使用map()來提取特定字段。 例如

.example."sub-example"|map(.name)

參考: https : //jqplay.org/s/N6TboUkELM

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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