json.Unmarshal json string to object is empty 结果

json.Unmarshal json string to object is empty result

我有一个像这样的非常简单的程序:

package main

import (
    "encoding/json"
    "fmt"
)

type RunCommand struct{
    level string `json:"level"`
    caller string `json:"caller"`
    msg string `json:"msg"`
    cmd string `json:"cmd"`
}

func main() {
    content := `{"level":"info","caller":"my.go:10","msg":"run","cmd":"--parse"}`
    runCommand := RunCommand{}
    e := json.Unmarshal([]byte(content), &runCommand)
    if e != nil {
        fmt.Println("Unmarshal error")
    }
    fmt.Println(runCommand.level)
}

我希望我可以将 "content" 中的所有 json 字段解析为 "runCommand" 对象,但实际上,最终的 "fmt.Println" 什么也不打印。我哪里错了?

你必须有导出的字段,像这样:

type RunCommand struct{
    Level string `json:"level"`
    Caller string `json:"caller"`
    Msg string `json:"msg"`
    Cmd string `json:"cmd"`
}

现在您可以使用:fmt.Println(runCommand.Level) 否则 json.Unmarshal 将忽略未导出的字段。