首页 > 后端开发 > Golang > 如何解组具有未知密钥和动态服务器名称的嵌套 JSON?

如何解组具有未知密钥和动态服务器名称的嵌套 JSON?

Barbara Streisand
发布: 2024-11-22 07:03:11
原创
362 人浏览过

How to Unmarshall Nested JSON with Unknown Keys and Dynamic Server Names?

解组具有未知键的嵌套 JSON

挑战在于解析具有未知数量的外部键和结构混乱的嵌套的 JSON 结构钥匙。考虑以下 JSON 格式:

{
  "message": {
    "Server1.example.com": [],
    "Server2.example.com": []
  },
  "response_ms": 659,
  "success": true
}
登录后复制

结构定义复杂性

复杂性源于服务器名称之外缺少明确的键以及结构体的动态性质外键。使用深度嵌套结构的初始尝试:

type ServerDetails struct {
  Message struct {
    Hostname struct {
      Details struct {
        Application string `json:"application"`
      } `json:"-"`
    } `json:"-"`
  } `json:"message"`
}
登录后复制

由于未知的服务器名称和没有外部键的单个嵌套键而失败。

动态密钥解决方案

为了克服这些挑战,可以在顶级结构中使用 map[string]ServerStruct。 ServerStruct 包含应用程序、所有者和其他特定于每个服务器的相关信息。可以有策略地添加 JSON 标签以确保正确解析。

修订的结构定义

type YourStruct struct {
    Success bool
    ResponseMS int
    Servers map[string]*ServerStruct
}

type ServerStruct struct {
    Application string
    Owner string
    [...]
}
登录后复制

JSON 标签和解组

额外的 JSON 标签是必要的:

{
  "message": {
    "Server1.example.com": [
      {
        "application": "Apache",
        "host": {
          "name": "/^Server-[13456]/"
        },
        "owner": "User1",
        "project": "Web",
        "subowner": "User2"
      }
    ],
登录后复制

“消息”字段现在解组到map[string][]ServerStruct中。映射中的每个键代表一个服务器名称,对应的值是一个ServerStruct数组。使用“-”标签进行解组时会忽略“host”字段。

通过这些修改,可以将 JSON 数据成功解析为修改后的结构。

以上是如何解组具有未知密钥和动态服务器名称的嵌套 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板