首頁  >  文章  >  後端開發  >  如何在 Go 中解析 JSON HTTP 回應中的「ip」欄位?

如何在 Go 中解析 JSON HTTP 回應中的「ip」欄位?

Linda Hamilton
Linda Hamilton原創
2024-11-27 12:59:13336瀏覽

How to Parse an

在Go 中解析JSON HTTP 回應

在本文中,我們將解決一個常見的編碼挑戰:在Go 中解析來自HTTP請求的JSON 回應Go 程式語言。我們將透過一個範例來幫助您破解回應並提取特定值,例如「ip」欄位。

以以下curl 輸出為例:

{
  "type":"example",
  "data":{
    "name":"abc",
    "labels":{
      "key":"value"
    }
  },
  "subsets":[
    {
      "addresses":[
        {
          "ip":"192.168.103.178"
        }
      ],
      "ports":[
        {
          "port":80
        }
      ]
    }
  ]
}

我們的目標是從此回應中擷取「ip」欄位的值。

結構為基礎的 JSON解碼

為了解碼 JSON 回應,我們將建立鏡像 JSON 結構的結構。 Go 中的結構體充當我們資料的模板,定義其形狀和欄位。

以下範例程式碼示範了基於結構體的JSON 解碼:

type Example struct {
    Type    string   `json:"type,omitempty"`
    Subsets []Subset `json:"subsets,omitempty"`
}

type Subset struct {
    Addresses []Address `json:"addresses,omitempty"`
}

type Address struct {
    IP string `json:"IP,omitempty"`
}

func main() {

    jsonResponse := `{
        "type": "example",
        "data": {
            "name": "abc",
            "labels": {
                "key": "value"
            }
        },
        "subsets": [
            {
                "addresses": [
                    {
                        "ip": "192.168.103.178"
                    }
                ],
                "ports": [
                    {
                        "port": 80
                    }
                ]
            }
        ]
    }`

    r := bytes.NewReader([]byte(jsonResponse))
    decoder := json.NewDecoder(r)

    val := &Example{}
    err := decoder.Decode(val)

    if err != nil {
        log.Fatal(err)
    }

    for _, s := range val.Subsets {
        for _, a := range s.Addresses {
            fmt.Println(a.IP)
        }
    }
}

解碼特定金鑰

在上面的程式碼中,我們使用一個名為Example 的結構來匹配JSON 回應的結構。使用解碼器,我們可以將回應解碼為範例結構。

為了提取「ip」值,我們存取位址切片,它是位址結構的切片。每個 Address 結構體都包含“ip”字段,允許我們列印它的值。

透過以下步驟,您可以在 Go 中有效解析 JSON HTTP 回應並檢索特定的資料值,例如中的「ip」欄位這個範例。始終記住創建與 JSON 結構相符的結構,並使用解碼器以回應資料填充它們。

以上是如何在 Go 中解析 JSON HTTP 回應中的「ip」欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn