Home > Backend Development > Golang > Decode/unmarshal complex nested JSON data structures

Decode/unmarshal complex nested JSON data structures

WBOY
Release: 2024-02-10 13:57:09
forward
1049 people have browsed it

解码/解组复杂的嵌套 JSON 数据结构

php editor Strawberry introduces you to a powerful technique, which is to decode/unmarshal complex nested JSON data structures. In modern web applications, JSON data structures are widely used, but when the data structure becomes complex, it becomes difficult to parse and extract the required information. This article will share some practical tips and methods to help you easily cope with this challenge. Whether you are a beginner or an experienced developer, this article will provide you with valuable knowledge and practical tips. Let’s decode and unmarshal complex nested JSON data structures together!

Question content

I'm trying to process some JSON data returned from an API. However, it's not exactly a simple structure. It has a bunch of nested keys/values. I want to unmarshal it into a Go struct.

Is there an easy way to use go?

{
    "http_buffered_trace": {
     "request": {
      "headers": [
       {
        "key": ":authority",
        "value": "server.localhost:9443",
        "raw_value": ""
       },
       {
        "key": ":path",
        "value": "/get_data",
        "raw_value": ""
       },
       {
        "key": ":method",
        "value": "POST",
        "raw_value": ""
       },
       {
        "key": ":scheme",
        "value": "https",
        "raw_value": ""
       },
       {
        "key": "user-agent",
        "value": "curl/8.1.2",
        "raw_value": ""
       },
       {
        "key": "content-length",
        "value": "1059",
        "raw_value": ""
       },
       {
        "key": "accept",
        "value": "application/json",
        "raw_value": ""
       },
       {
        "key": "authorization",
        "value": "auth data here ! ",
        "raw_value": ""
       },
       {
        "key": "content-type",
        "value": "application/json",
        "raw_value": ""
       },
       {
        "key": "x-forwarded-for",
        "value": "10.42.0.1",
        "raw_value": ""
       },
       {
        "key": "x-forwarded-host",
        "value": "server.localhost:9443",
        "raw_value": ""
       },
       {
        "key": "x-forwarded-port",
        "value": "9443",
        "raw_value": ""
       },
       {
        "key": "x-forwarded-proto",
        "value": "https",
        "raw_value": ""
       },
       {
        "key": "x-forwarded-server",
        "value": "traefik-64f55bb67d-6bbjl",
        "raw_value": ""
       },
       {
        "key": "x-real-ip",
        "value": "10.42.0.1",
        "raw_value": ""
       },
       {
        "key": "accept-encoding",
        "value": "gzip",
        "raw_value": ""
       },
       {
        "key": "x-apache-internal",
        "value": "true",
        "raw_value": ""
       },
       {
        "key": "x-request-id",
        "value": "995f0028-432e-499b-8bb9-c102834e150d",
        "raw_value": ""
       },
       {
        "key": "x-apache-expected-rq-timeout-ms",
        "value": "15000",
        "raw_value": ""
       }
      ],
      "body": {
       "as_string": "Request body in here !",
       "truncated": false
      },
      "trailers": []
     },
     "response": {
      "headers": [
       {
        "key": ":status",
        "value": "200",
        "raw_value": ""
       },
       {
        "key": "content-type",
        "value": "application/json; charset=UTF-8",
        "raw_value": ""
       },
       {
        "key": "date",
        "value": "Wed, 01 Nov 2023 13:36:05 GMT",
        "raw_value": ""
       },
       {
        "key": "x-apache-upstream-service-time",
        "value": "4",
        "raw_value": ""
       },
       {
        "key": "server",
        "value": "envoy",
        "raw_value": ""
       }
      ],
      "body": {
       "as_string": "Response body in here!",
       "truncated": false
      },
      "trailers": []
     }
    }
   }
Copy after login

Solution

Here is a simple method:

type Header struct {
    Key      string `json:"key"`
    Value    string `json:"value"`
    RawValue string `json:"raw_value"`
}

type Trailer = Header

type Body struct {
    Truncated bool   `json:"truncated"`
    AsString  string `json:"as_string"`
}

type Request struct {
    Headers  []Header  `json:"headers"`
    Body     Body      `json:"body"`
    Trailers []Trailer `json:"trailers"`
}

type Response = Request

type HttpBufferedTrace struct {
    HttpBufferedTrace struct {
        Request  Request  `json:"request"`
        Response Response `json:"response"`
    } `json:"http_buffered_trace"`
}

func main() {

    h := HttpBufferedTrace{}

    json.Unmarshal([]byte(jsonStr), &h)

    fmt.Println(h)
}
Copy after login

https://www.php.cn/link/a98bf9c158d51c9757bd04eb9d2e16f7

The above is the detailed content of Decode/unmarshal complex nested JSON data structures. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template