json.Marshal(struct) returns "{}"

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[:]))
}

Here is the output:

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

Why is the JSON essentially empty?

47811 次浏览

您需要通过将字段名称中的第一个字母大写来 出口 TestObject 中的字段。将 kind更改为 Kind,以此类推。

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

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

字段声明后面的 `json:"..."`字符串是 结构标记。此结构中的标记设置与 JSON 进行封送处理时该结构字段的名称。

在操场上。

  • 当第一个字母是 < em > 大写的 时,标识符对于任何 一段你想用的代码。
  • 当第一个字母是 < em > 小写时,标识符是私有的,并且 只能在声明的包中访问。

例子

 var aName // private


var BigBro // public (exported)


var 123abc // illegal


func (p *Person) SetEmail(email string) {  // public because SetEmail() function starts with upper case
p.email = email
}


func (p Person) email() string { // private because email() function starts with lower case
return p.email
}

在哥兰

在 struct 中第一个字母必须大写 电话号码-> 电话号码

= = = = = = = = 增加细节

首先,我尝试这样编码

type Questions struct {
id           string
questionDesc string
questionID   string
ans          string
choices      struct {
choice1 string
choice2 string
choice3 string
choice4 string
}
}

Golang 编译没有错误,也没有显示警告。但是响应是空的,因为

之后,我搜索谷歌找到了这篇文章

结构类型和结构类型文字 文章 然后... 我尝试编辑代码。

//Questions map field name like database
type Questions struct {
ID           string
QuestionDesc string
QuestionID   string
Ans          string
Choices      struct {
Choice1 string
Choice2 string
Choice3 string
Choice4 string
}
}

是工作。

寻求帮助。