在Golang中将复杂的JSON结构初始化为地图

时间:2019-07-03 13:47:03

标签: json go

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

3 个答案:

答案 0 :(得分:1)

通常人们为此使用interface{}Unmarshal()

查看一些示例

希望这会有所帮助! :)

答案 1 :(得分:1)

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

尝试使用此代码here 。有关更多详细信息,请参阅此article

答案 2 :(得分:0)

我成功了,觉得很丑。

        // 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