我是Go的初学者,我正在尝试调用json rest-API,我正在尝试使用goreq request lib。在自述文件中,它给出了the following example来解码收到的json:
type Item struct {
Id int
Name string
}
var item Item
res.Body.FromJsonTo(&item)
我理解这个例子,但我收到的json更复杂(见下文)。我不确定如何创建代表这种复杂结构的struct
。我可以在一个struct
中编写它,还是我需要使用地图作为出价和询问数组,另一个结构用于出价和询问对象,还有一个结构用于"vars"
对象?
是否有任何自动json_to_struct()
函数在收到json时动态构建结构(我看过但我找不到任何东西)?
欢迎所有提示!
{
"success": true,
"message": "something",
"vars": {"some": "value", "thenumber": 7612.32},
"result": {
"bids": [
{"quantity": 2, "price": 416.02, "cm": "some text"},
etc..
],
"asks": [
{"quantity": 1, "price": 420.02, "cm": "some text"},
etc..
],
"slip": 4
}
}
答案 0 :(得分:2)
<强> TL; DR 强>
我可以在一个结构中编写吗
是
或者我是否需要使用地图作为出价和询问数组,还有另一个 出价和询问对象的结构?
是
在我实际握手之前,我会建议你花更多的时间来习惯Go中的事情。这可能是乏味的工作,但它非常简单。
长版
我不确定如何创建代表这个复杂的结构 结构
如果你不得不在你的程序中代表这个,而没有任何JSON,那么你将以同样的方式去做。
在我们将其翻译成Go之前,让我们用英语解释一下你的信息:
你有一个包含字段的结构:
现在,Result也是一个结构,所以我们需要描述它:
让我们对Bids和Asks做同样的事情(看起来一样,这样我就可以节省空间)
现在让我们定义我们的结构:
让我们调用容器结构&#34;响应&#34;结果一&#34;结果&#34;
type Response struct {
Success bool `json:"success"`
Message string `json:"message"`
Result Result `json:"result"`
}
type Result struct {
Bids []Quote `json:"bids"`
Asks []Quote `json:"asks"`
Slip int `json:"slip"`
}
type Quote struct {
//As asks and bids are have the same structure we can save code
Quantity int `json:"quantity"`
Price float64 `json:"price"`
Cm string `json:"cm"`
}
不要忘记添加注释,以便(联合国)编组功能可以将JSON中的字段与Struct正确匹配。
我相信以上是实现此目的的最佳和更易维护的方式,但是您也可以使用嵌套的匿名结构编写相同的结构:
type Response struct {
Success bool `json:"success"`
Message string `json:"message"`
Result struct {
Bids []struct {
Quantity int `json:"quantity"`
Price float64 `json:"price"`
Cm string `json:"cm"`
} `json:"bids"`
Asks []struct {
Quantity int `json:"quantity"`
Price float64 `json:"price"`
Cm string `json:"cm"`
} `json:"asks"`
Slip int `json:"slip"`
} `json:"result"`
}
顺便说一下,几周前我发现了一个有趣的工具,可以自动将JSON转换为Go结构,您可以立即在代码中声明:https://transform.now.sh/json-to-go/