如何使用golang中的jsonrpc包将嵌套映射从服务器发送到客户端?
我正在编写一个客户端-服务器go应用程序,它使用yahoo finance api获取实时股票价格。我正在使用jsonrpc包连接客户端和服务器。 我无法将嵌套映射响应从服务器传递到客户端。这是我从客户机文件中提取的小片段。client.go文件如何使用golang中的jsonrpc包将嵌套映射从服务器发送到客户端?,go,Go,我正在编写一个客户端-服务器go应用程序,它使用yahoo finance api获取实时股票价格。我正在使用jsonrpc包连接客户端和服务器。 我无法将嵌套映射响应从服务器传递到客户端。这是我从客户机文件中提取的小片段。client.go文件 var ( reply map[string]map[int]float64 ) c := jsonrpc.NewClient(client) err = c.Call("JSONResponse.GetSto
var (
reply map[string]map[int]float64
)
c := jsonrpc.NewClient(client)
err = c.Call("JSONResponse.GetStockValue", args, &reply)
fmt.Println(reply)
服务器文件如下所示:
func (j *JSONResponse) GetStockValue(args *ClientRequest, reply *map[string]map[int]float64) error {
some piece of code......
nestedMap := make(map[string]map[int]float64)
add some values in nested map .....
fmt.Println(nestedMap)
*reply = nestedMap
return nil
}
这不会向客户端发送任何响应。当我将嵌套映射更改为简单映射(如map[string]int)时,它可以正常工作。嵌套映射在服务器上正确显示,但不会在客户端显示。客户端只是继续等待服务器的响应。如果有人能告诉我为什么它不接受嵌套映射,并且对于一个简单的映射效果很好,那将非常有帮助
谢谢:)
jsonrpc
是jsonrpc
,因为它使用json
进行序列化。要封送映射到json
,需要string
键类型。如果您在此处打印出err
,请参阅err=c.Call(“JSONResponse.GetStockValue”、args和reply)
您应该看到查找对象键字符串开头的原因无效字符''。
表示对象的键需要是字符串
或者,如果您使用的JSON是
string
,那么JSON:cannot unmarshal object to Go value type map[int]float64
我不知道为什么会出现这种情况,但当我将嵌套映射的类型从m[string]map[int]float64更改为map[string]map[string]string时,它对我起到了作用。有人能解释一下原因吗?与此无关,您应该从GetStockValue()
返回nestedMap
,而不是更改reply
的值,这是一个全局变量(糟糕的做法)。