如何用Go结构表示这个复杂的数据结构?

mar*_*cio 5 json struct go

所以我决定给Go另一个机会但是卡住了.文档中的大多数Go结构示例都非常简单,我发现以下JSON对象表示法我不知道如何用Go结构表示:

{
    id: 1,
    version: "1.0",
    method: "someString",
    params: [
        {
            clientid: "string",
            nickname: "string",
            level: "string"
        },
        [{
            value: "string",
            "function": "string"
        }]
    ]
}
Run Code Online (Sandbox Code Playgroud)

你怎么会,更有经验的地鼠,代表Go中有些奇怪的数据?以及如何初始化结果结构的嵌套元素?

Sim*_*ead 12

我会使用一个json.RawMessage 切片作为params属性..然后将它们隐藏在一个GetXXX方法后面,它很好地解码它.有点像这样:

type Outer struct {
    Id      int               `json:"id"`
    Version string            `json:"version"`
    Method  string            `json:"method"`
    Params  []json.RawMessage `json:"params"`
}

type Client struct {
    ClientId string `json:"clientid"`
    Nickname string `json:"nickname"`
    Level    string `json:"level"`
}

....

obj := Outer{}

err := json.Unmarshal([]byte(js), &obj)

if err != nil {
    fmt.Println(err)
}

fmt.Println(obj.Method) // prints "someString"

client := Client{}

err = json.Unmarshal(obj.Params[0], &client)

fmt.Println(client.Nickname) // prints "string"
Run Code Online (Sandbox Code Playgroud)

工作(午餐时间快速捣碎)样本:http://play.golang.org/p/Gp7UKj6pRK

第二个param将需要你的一些输入..但你基本上是在将它解码为你创建的任何类型的片段来表示它.