首页 > 解决方案 > json.Unmarshal json 字符串到对象是空结果

问题描述

我有一个非常简单的程序,如下所示:

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”什么也没打印。我哪里做错了?

标签: jsonobjectgomarshalling

解决方案


您必须导出字段,如下所示:

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将忽略未导出的字段。


推荐阅读