Golang:将json字符串解析为struct

Rud*_*koŭ 6 parsing json go

我有structRequest,值是可选的:

type Request struct {
    Operation string      `json:"operation"`
    Key string            `json:"key"`
    Value string          `json:"value"`
}
Run Code Online (Sandbox Code Playgroud)

并且应该将json字符串解析为struct ^的函数

go func() {
    s := string("{'operation': 'get', 'key': 'example'}")
    data := Request{}
    json.Unmarshal([]byte(s), data)
    log.Printf("Operation: %s", data.Operation)
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因data.Operation是空的.这有什么不对?

dav*_*ave 25

两个问题,第一,你的json无效,需要用"而不是'

其次,你必须解散&data而不是解散data

https://play.golang.org/p/zdMq5_ex8G

package main

import (
    "fmt"
    "encoding/json"
)

type Request struct {
    Operation string      `json:"operation"`
    Key string            `json:"key"`
    Value string          `json:"value"`
}

func main() {
    s := string(`{"operation": "get", "key": "example"}`)
    data := Request{}
    json.Unmarshal([]byte(s), &data)
    fmt.Printf("Operation: %s", data.Operation)
}
Run Code Online (Sandbox Code Playgroud)

旁注,你会看到这个,如果你一直在检查你的错误:

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
}
Run Code Online (Sandbox Code Playgroud)