在Golang中将复杂的JSON结构初始化为映射

在Golang中将复杂的JSON结构初始化为映射,json,go,Json,Go,我需要提供一个将[string]接口{}映射到函数。背后的JSON是: { "update": { "comment": [ { "add": { "body": "this is a body" } } ] } } 我完全卡住了。我尝试了嵌套结构,映射,两者的混合,我就是看不到这个简单问题的解决方案 我最后一次尝试是: //准备数据 var d

我需要提供一个
将[string]接口{}
映射到函数。背后的JSON是:


{
   "update": {
     "comment": [
         {
            "add": {
               "body": "this is a body"
            }
         }
      ]
   }
}
我完全卡住了。我尝试了嵌套结构,映射,两者的混合,我就是看不到这个简单问题的解决方案

我最后一次尝试是:

//准备数据
var data=make(映射[字符串]接口{})
var comments[]映射[string]映射[string]字符串
var comment=make(映射[string]映射[string]字符串)
注释[“添加”]=映射[字符串]字符串{
“正文”:“测试”,
}
注释=附加(注释,注释)
数据[“更新”][“注释”]=注释

我成功地做到了这一点,我觉得这很难看

//准备数据
var data=make(映射[字符串]接口{})
var comments[]映射[string]映射[string]字符串
var comment=make(映射[string]映射[string]字符串)
注释[“添加”]=映射[字符串]字符串{
“正文”:“测试”,
}
注释=附加(注释,注释)
var update=make(映射[字符串]接口{})
更新[“注释”]=注释
数据[“更新”]=更新

我成功地做到了这一点,我觉得这很难看

//准备数据
var data=make(映射[字符串]接口{})
var comments[]映射[string]映射[string]字符串
var comment=make(映射[string]映射[string]字符串)
注释[“添加”]=映射[字符串]字符串{
“正文”:“测试”,
}
注释=附加(注释,注释)
var update=make(映射[字符串]接口{})
更新[“注释”]=注释
数据[“更新”]=更新

人们通常使用
接口{}
解组()
来实现这一点

看看一些例子


希望这有帮助!:)

通常人们使用
接口{}
解组()
来实现这一点

看看一些例子


希望这有帮助!:)

您可以使用以下格式创建并初始化json对象

import (
   "fmt",
   "encoding/json"
)


type Object struct {
     Update Update `json:"update"`
}

type Update struct {
    Comments []Comment `json:"comments"`
}

type Comment struct {
    Add Add `json:"add"`
}

type Add struct {
    Body Body `json:"body"`
}

type Body string

func main() {
    obj := make(map[string]Object)
    obj["buzz"] = Object{
        Update: Update{
            Comments: []Comment{
                Comment{
                    Add: Add{
                         Body: "foo",
                    },
                },
            },
        },
    }

    fmt.Printf("%+v\n", obj)
    obj2B, _ := json.Marshal(obj["buzz"])
    fmt.Println(string(obj2B))
}
初始化对象obj将是

map[buzz:{Update:{Comments:[{Add:{Body:foo}}]}}]
请尝试使用此代码
. 有关更多详细信息,请参阅此

您可以使用以下格式创建并初始化json对象

import (
   "fmt",
   "encoding/json"
)


type Object struct {
     Update Update `json:"update"`
}

type Update struct {
    Comments []Comment `json:"comments"`
}

type Comment struct {
    Add Add `json:"add"`
}

type Add struct {
    Body Body `json:"body"`
}

type Body string

func main() {
    obj := make(map[string]Object)
    obj["buzz"] = Object{
        Update: Update{
            Comments: []Comment{
                Comment{
                    Add: Add{
                         Body: "foo",
                    },
                },
            },
        },
    }

    fmt.Printf("%+v\n", obj)
    obj2B, _ := json.Marshal(obj["buzz"])
    fmt.Println(string(obj2B))
}
初始化对象obj将是

map[buzz:{Update:{Comments:[{Add:{Body:foo}}]}}]
请尝试使用此代码
. 有关更多详细信息,请参阅此

谢谢,看到了一些有趣的东西!谢谢,看到了一些有趣的东西!您可以创建类型为
map[string]Object
的新映射,并将初始化的
obj
var分配给它。您可以创建类型为
map[string]Object
的新映射,并将初始化的
obj
var分配给它。