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

我需要提供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


慕桂英3389331
浏览 263回答 4
4回答

喵喵时光机

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

慕工程0101907

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

慕田峪7331174

可能晚了3年,但我自己也偶然发现了这个问题,显然你也可以这样做:data := map[string]interface{}{    "update": map[string]interface{}{        "comment": []map[string]interface{}{            {                "add": map[string]string{                    "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)        var update = make(map[string]interface{})        update["comment"] = comments        data["update"] = update
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go