首页 > 后端开发 > Golang > 如何在 Go 中将动态 Viper 或 JSON 键解组为结构字段?

如何在 Go 中将动态 Viper 或 JSON 键解组为结构字段?

Barbara Streisand
发布: 2024-11-20 15:30:13
原创
526 人浏览过

How to Unmarshal Dynamic Viper or JSON Keys as Struct Fields in Go?

在 Go 中将动态 Viper 或 JSON 键解组为结构字段

在 Go 中,处理结构字段中的动态 JSON 键可能具有挑战性。让我们深入研究这个问题,并使用 Viper 库提供一个全面的解决方案。

问题陈述

考虑一个带有动态键的 JSON 配置文件:

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}
登录后复制

要将此配置解析为结构体,可以定义:

type Thing struct {
  Name string  `?????`
  Key1 string  `json:"key2"`
  Key2 string  `json:"key2"`
}
登录后复制

但是,问题出现了:如何将动态键解组为结构体字段名称?

解决方案

来处理动态键,考虑使用映射:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
登录后复制

Unmarshal例如:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}
登录后复制

Playground 示例

如果键必须是结构体的成员,则可以在解组后使用循环添加它:

type Thing struct {
    Name string `json:"-"` // Add the field
    Key1 string
    Key2 string
}

...

// Fix the name field after unmarshal
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}
登录后复制

游乐场示例

使用这些技术,即使使用像 Viper 这样的库,您也可以有效地将动态 JSON 键解组到 Go 中的结构字段中。

以上是如何在 Go 中将动态 Viper 或 JSON 键解组为结构字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

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