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
将忽略未导出的字段。
我有一个像这样的非常简单的程序:
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
将忽略未导出的字段。