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

标签 json struct go

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

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

作为更有经验的 gophers,你们如何在 Go 中表示有点奇怪的数据?以及如何初始化结果结构的嵌套元素?

最佳答案

我会为 params 属性使用一个 json.RawMessage slice 。然后将它们隐藏在一个 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"

工作(在午餐时间迅速拼凑)示例:http://play.golang.org/p/Gp7UKj6pRK

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

关于json - 如何用 Go 结构体来表示这个复杂的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181424/

相关文章:

json - 使用 jq 从嵌套 JSON 对象中提取匹配的子 json

json - 结构中的泛化 - golang

go - 如何反转字符串中每个字母的大小写?

go - time.Since() 的奇怪行为

java - 使用Gson解析JSON数字数组

c# - JSON.net(反)序列化未类型化的属性

javascript - javascript 对象表示法中的尾随逗号和/或不存在的键是否正常?

c++ - cash reg 将每行中的单个单词加载到不同的结构成员中

c - 为什么我的 C 代码无法识别结构数组并重复用户输入?

c - 像 OpenMP 这样的 golang 中有一个简单的 `parallel for` 吗?