patterngoCritical
json.Marshal(struct) returns "{}"
Viewed 0 times
returnsstructmarshaljson
Problem
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}
{}
PASSWhy is the JSON essentially empty?
Solution
You need to export the fields in TestObject by capitalizing the first letter in the field name. Change
The encoding/json package and similar packages ignore unexported fields.
The `
Run it on the playground.
kind to Kind and so on.type TestObject struct {
Kind string `json:"kind"`
Id string `json:"id,omitempty"`
Name string `json:"name"`
Email string `json:"email"`
}The encoding/json package and similar packages ignore unexported fields.
The `
json:"..."` strings that follow the field declarations are struct tags. The tags in this struct set the names of the struct's fields when marshaling to and from JSON.Run it on the playground.
Code Snippets
type TestObject struct {
Kind string `json:"kind"`
Id string `json:"id,omitempty"`
Name string `json:"name"`
Email string `json:"email"`
}Context
Stack Overflow Q#26327391, score: 351
Revisions (0)
No revisions yet.