dpbdl44228 2018-10-31 07:22
浏览 43
已采纳

有没有更好的方法来声明json变量

Declaring a variable of type map[string]map[string]... is not ideal, is there a better way

    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"])
  • 写回答

1条回答 默认 最新

  • dsklfsdlkf1232 2018-10-31 07:28
    关注

    The simplest way would be to use the type map[string]interface{}. Since the empty interface, interface{}, refers to any type and therefore handles the arbitrarily nested nature of JSON.

    To do this you'll have to write your literal data as a string first and then parse the string into a Go map.

    With that in mind here is a refactor of your example:

    first: import "encoding/json", then

    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)
    

    And now snaps is as desired.

    This is the most generic format for JSON data in Go and is one of the ways that the Go JSON library handles types for JSON. See these docs: https://golang.org/pkg/encoding/json/#Unmarshal

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 想写一个文件管理器,加载全部子文件夹后,要一级一级返回
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?
  • ¥15 请问GPT语言模型怎么训练?
  • ¥15 已知平面坐标系(非直角坐标系)内三个点的坐标,反求两坐标轴的夹角
  • ¥15 webots有问题,无响应
  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?