如何将JSON字符串解析为struct
我有请求的如何将JSON字符串解析为struct,json,parsing,go,Json,Parsing,Go,我有请求的struct,值是可选的: type Request struct { Operation string `json:"operation"` Key string `json:"key"` Value string `json:"value"` } 和函数,该函数应将json字符串解析为struct^ go func() { s := string("{'operation': 'get', 'key
struct
,值是可选的:
type Request struct {
Operation string `json:"operation"`
Key string `json:"key"`
Value string `json:"value"`
}
和函数,该函数应将json字符串解析为struct^
go func() {
s := string("{'operation': 'get', 'key': 'example'}")
data := Request{}
json.Unmarshal([]byte(s), data)
log.Printf("Operation: %s", data.Operation)
}
由于某些原因,数据。操作为空。这里有什么问题?两个问题,首先,您的json无效,它需要使用
“
而不是”
其次,您必须解组到&data
,而不是data
请注意,如果您一直在检查错误,您会看到以下内容:
err := json.Unmarshal([]byte(s), data)
if err != nil {
fmt.Println(err.Error())
//json: Unmarshal(non-pointer main.Request)
}
s := string("{'operation': 'get', 'key': 'example'}")
//...
err := json.Unmarshal([]byte(s), data)
if err != nil {
fmt.Println(err.Error())
//invalid character '\'' looking for beginning of object key string
}
您还有一个
go
关键字,带但不带函数调用。如果是打字错误,则缺少()
,然后您就有了一个没有任何同步的goroutine。这是最常见的问题之一,不要忽略错误。json.Unmarshal返回一个错误类型。该错误的输出会告诉您json有无效的引号,在您修复后,会告诉您目标变量需要是一个pointeR
err := json.Unmarshal([]byte(s), data)
if err != nil {
fmt.Println(err.Error())
//json: Unmarshal(non-pointer main.Request)
}
s := string("{'operation': 'get', 'key': 'example'}")
//...
err := json.Unmarshal([]byte(s), data)
if err != nil {
fmt.Println(err.Error())
//invalid character '\'' looking for beginning of object key string
}