登录
首页 >  Golang >  Go问答

优化 JSON 变量声明的方法

来源:stackoverflow

时间:2024-03-26 12:27:36 166浏览 收藏

在 Go 语言中,声明复杂 JSON 变量(如多层嵌套映射)时存在局限性。为了解决这个问题,本文介绍了一种替代方法,即使用 map[string]interface{} 类型。通过将 JSON 数据转换为字符串并使用 json.Unmarshal() 函数解析它,可以将 JSON 数据存储在 map[string]interface{} 中,该类型可以处理任意嵌套的 JSON 数据。

问题内容

声明一个类型为map[string]map[string]...的变量并不理想,有没有更好的方法

snaps := map[string]map[string]map[string]map[string]string{
    "distros": {
        "aws": {
            "eu-west-1": {
                "snap-0": "/dev/sdm",
            },
            "eu-west-2": {
                "snap-1": "/dev/sdm",
            },
        },
    },
}

fmt.Println(snaps["distros"]["aws"]["eu-west-1"])

解决方案


最简单的方法是使用 map[string]interface{} 类型。由于空接口 interface{} 引用任何类型,因此可以处理 json 的任意嵌套性质。

为此,您必须首先将文字数据写入字符串,然后将该字符串解析为 go map

考虑到这一点,这里是对您的示例的重构:

首先:import "encoding/json",然后

snapsStr := `{
    "distros": {
        "aws": {
            "eu-west-1" : {
                "snap-0": "/dev/sdm"
            },
            "eu-west-2": {
                "snap-1": "/dev/sdm"
            }
        }
    }
}`

var snaps map[string]interface{}

json.Unmarshal([]byte(snapsStr), &snaps)

现在 snaps 已如您所愿。

这是 go 中 json 数据最通用的格式,也是 go json 库处理 json 类型的方式之一。请参阅这些文档:https://golang.org/pkg/encoding/json/#Unmarshal

今天关于《优化 JSON 变量声明的方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>