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

Json 如何用Go结构表示这个复杂的数据结构?,json,struct,go,Json,Struct,Go,所以我决定再给Go一次机会,但被卡住了。文档中的大多数Go结构示例都非常简单,我发现以下JSON对象表示法我不知道如何用Go结构表示: { id: 1, version: "1.0", method: "someString", params: [ { clientid: "string", nickname: "string", level: "string"

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

{
    id: 1,
    version: "1.0",
    method: "someString",
    params: [
        {
            clientid: "string",
            nickname: "string",
            level: "string"
        },
        [{
            value: "string",
            "function": "string"
        }]
    ]
}

你们,更有经验的地鼠,会如何在围棋中表现那个些有点奇怪的数据?以及如何初始化结果结构的嵌套元素?

我将使用
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"
工作(在午餐时间很快就碎在一起)样本:


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

来自Python | PHP | JS | Lua背景这看起来像是很多代码,只是为了做一件非常简单的事情。无论如何,有人真的需要修复Go xD,我喜欢你的答案:它比我做的要好得多。谢谢。因为JSON对象太奇怪了,所以代码太多了。一个数组,其中一个项是一个对象。。。但另一项本身是数组?在大多数系统设计中我看不到这种情况。如果你的系统中有这个。。我一点也不羡慕你,不是我的错。我正在开发一个应用程序来集成我家里的一些电子设备,有些设备有奇怪的API,其中一些甚至更糟糕,因为它们的SOAP嵌入式服务器。无论如何,使用Python、PHP、Javascript或Lua,映射此数据结构非常容易。对于Go来说,它出乎意料地不直截了当,这很奇怪,因为我尝试用Go做的几乎每件事都像馅饼一样简单。您的其他选项是将它直接映射到一个
map[string]接口{}
,并手动导航整个界面。。。但这比上面的工作要多得多。但我不是在批评你的答案,你做得很好,它看起来比我的代码好得多。我只是觉得Go可以从更普遍的数据结构中获益,比如JSON对象、PHP数组、Lua表等。