Home  >  Article  >  Backend Development  >  How to Parse an \'ip\' Field from a JSON HTTP Response in Go?

How to Parse an \'ip\' Field from a JSON HTTP Response in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-11-27 12:59:13336browse

How to Parse an

Parsing JSON HTTP Responses in Go

In this article, we'll address a common coding challenge: parsing JSON responses from HTTP requests in the Go programming language. We'll walk through an example to help you decipher the response and extract specific values, such as the "ip" field.

Consider the following curl output as an example:

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

Our goal is to retrieve the value of the "ip" field from this response.

Struct-Based JSON Decoding

To decode the JSON response, we'll create structs that mirror the JSON structure. Structs in Go serve as templates for our data, defining their shape and fields.

Here's a sample code that demonstrates struct-based JSON decoding:

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)
        }
    }
}

Decoding a Specific Key

In the code above, we're using a struct called Example to match the structure of the JSON response. Using the decoder, we're then able to decode the response into our Example struct.

To extract the "ip" value, we access the Addresses slice, which is a slice of Address structs. Each Address struct contains the "ip" field, allowing us to print its value.

By following these steps, you can effectively parse JSON HTTP responses in Go and retrieve specific data values, like the "ip" field in this example. Always remember to create structs that match the JSON structure and use a decoder to populate them with the response data.

The above is the detailed content of How to Parse an \'ip\' Field from a JSON HTTP Response in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn