【发布时间】:2019-05-12 10:07:40
【问题描述】:
我正在尝试编写一个接收编码字符串的函数,向 jsonrpc 服务发送请求,然后我需要选择一个无聊的数据(ask:assets:interface)并创建一个新变量
如何为对象创建结构:
{
"ask": {
"amount": 0,
"assets": [
{
"assetref": "74-266-27408",
"name": "USD",
"qty": 5000
}
]
},
"cancomplete": true,
"candisable": true,
"complete": false,
"offer": {
"amount": 0,
"assets": [
{
"assetref": "73-266-61482",
"name": "BTC",
"qty": 1
}
]
},
"requiredfee": 0
}
并制作一个解码十六进制字符串的函数:
type Order struct {
Ask []Ask `json:"ask"`
Cancomplete bool `json:"cancomplete"`
Candisable bool `json:"candisable"`
Complete bool `json:"complete"`
Offer []Offer `json:"offer"`
Requiredfee int `json:"requiredfee"`
}
func DecodeOrder(datahex string) (Order) {
order, _ := rpcClient.Call("decoderawexchange", datahex)
var d = make([]Order, 0, 100)
err := order.GetObject(&d)
if err != nil || d == nil {
panic(err)
}
return d
}
使用生成的结构解决问题:
type Order struct {
Ask struct {
Amount float64 `json:"amount"`
Assets []struct {
Assetref string `json:"assetref"`
Name string `json:"name"`
Qty float64 `json:"qty"`
} `json:"assets"`
} `json:"ask"`
Cancomplete bool `json:"cancomplete"`
Candisable bool `json:"candisable"`
Complete bool `json:"complete"`
Offer struct {
Amount float64 `json:"amount"`
Assets []struct {
Assetref string `json:"assetref"`
Name string `json:"name"`
Qty float64 `json:"qty"`
} `json:"assets"`
} `json:"offer"`
Requiredfee float64 `json:"requiredfee"`
}
【问题讨论】:
-
我不知道那是什么意思。你的问题很难理解。
-
d不是一个数组,它是一个映射,它们在 Go 中不是一回事。由于您使用的是接口映射,因此从映射中获取任何项目都会变得难看,并且项目嵌套越多,代码就越难看。我建议您使用结构类型而不是地图,或者使用 3rd 方库,使地图的遍历更容易。要查看它有多难看,请考虑获取 d.ask.assets[0].name 的解决方案:d["ask"].(map[string]interface{})["assets"].([]interface{})[0].(map[string]interface{})["name"].(string)。
标签: go