为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕桂英3389331 2023-06-26 18:08:55
我需要提供map[string]interface{}一个函数。后面的 JSON 是这样的:{   "update": {     "comment": [         {            "add": {               "body": "this is a body"            }         }      ]   }}我完全被困住了。我尝试使用嵌套结构、地图、两者的混合,我只是看不到这个简单问题的解决方案。我的最后一次尝试是:    // Prepare the data    var data = make(map[string]interface{})    var comments []map[string]map[string]string    var comment = make(map[string]map[string]string)    comment["add"] = map[string]string{        "body": "Test",    }    comments = append(comments, comment)    data["update"]["comment"] = comments
查看完整描述

4 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

通常人们使用interface{}andUnmarshal()来达到这个目的!

查看完整回答
反对 回复 2023-06-26
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

您可以使用以下格式创建并初始化 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}}]}}]

查看完整回答
反对 回复 2023-06-26
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

可能晚了3年,但我自己也偶然发现了这个问题,显然你也可以这样做:


data := map[string]interface{}{

    "update": map[string]interface{}{

        "comment": []map[string]interface{}{

            {

                "add": map[string]string{

                    "body": "this is a body",

                },

            },

        },

    },

}


查看完整回答
反对 回复 2023-06-26
?
互换的青春

TA贡献1797条经验 获得超6个赞

我成功了,我觉得这很丑。


        // Prepare the data

        var data = make(map[string]interface{})

        var comments []map[string]map[string]string

        var comment = make(map[string]map[string]string)

        comment["add"] = map[string]string{

            "body": "Test",

        }

        comments = append(comments, comment)

        var update = make(map[string]interface{})

        update["comment"] = comments

        data["update"] = update


查看完整回答
反对 回复 2023-06-26
  • 4 回答
  • 0 关注
  • 256 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信