所以我决定给Go另一次机会但是卡住了。文档中的大多数Go结构示例都非常简单,我发现以下JSON对象表示法,我不知道如何用Go结构表示:
{
id: 1,
version: "1.0",
method: "someString",
params: [
{
clientid: "string",
nickname: "string",
level: "string"
},
[{
value: "string",
"function": "string"
}]
]
}
你如何,更有经验的地鼠,代表Go中有些奇怪的数据?以及如何初始化生成的结构的嵌套元素?
答案 0 :(得分: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"
工作(午餐时间快速捣碎)样本:http://play.golang.org/p/Gp7UKj6pRK
第二个param
需要你的一些输入..但你基本上都在考虑将它解码为你创建的任何类型的片段来代表它。