一尘不染

json.Marshal(struct) 返回“{}”

go

type TestObject struct {
    kind string `json:"kind"`
    id   string `json:"id, omitempty"`
    name  string `json:"name"`
    email string `json:"email"`
}

func TestCreateSingleItemResponse(t *testing.T) {
    testObject := new(TestObject)
    testObject.kind = "TestObject"
    testObject.id = "f73h5jf8"
    testObject.name = "Yuri Gagarin"
    testObject.email = "Yuri.Gagarin@Vostok.com"

    fmt.Println(testObject)

    b, err := json.Marshal(testObject)

    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(b[:]))
}

这是输出:

[ `go test -test.run="^TestCreateSingleItemResponse$"` | done: 2.195666095s ]
    {TestObject f73h5jf8 Yuri Gagarin Yuri.Gagarin@Vostok.com}
    {}
    PASS

为什么 JSON 本质上是空的?


阅读 159

收藏
2021-11-11

共1个答案

一尘不染

您需要通过将字段名称中的第一个字母大写来导出TestObject 中的字段。更改kindKind等等。

type TestObject struct {
 Kind string `json:"kind"`
 Id   string `json:"id,omitempty"`
 Name  string `json:"name"`
 Email string `json:"email"`
}

encoding/json 包和类似的包会忽略未导出的字段。

json:"..."字段声明后面的字符串是struct tags。在与 JSON 之间进行封送处理时,此结构中的标签设置结构字段的名称。

2021-11-11