首页 > 后端开发 > Golang > 正文

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

WBOY
发布: 2024-02-10 13:57:09
转载
1001人浏览过

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

php小编草莓向大家介绍一种强大的技巧,即解码/解组复杂的嵌套 JSON 数据结构。在现代的网络应用中,JSON 数据结构被广泛使用,但是当数据结构变得复杂时,解析和提取所需信息会变得困难。本文将分享一些实用的技巧和方法,帮助大家轻松应对这个挑战。无论您是初学者还是有经验的开发者,本文都将为您提供有价值的知识和实用的技巧。让我们一起来解码和解组复杂的嵌套 JSON 数据结构吧!

问题内容

我正在尝试处理从 API 返回的一些 JSON 数据。然而,它并不完全是一个简单的结构。它有一堆嵌套的键/值。我想将其解组为 Go 结构。

使用 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": []
     }
    }
   }
登录后复制

解决方法

这里有一个简单的方法:

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)
}
登录后复制

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

以上就是解码/解组复杂的嵌套 JSON 数据结构的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号