print handling golang deserialize json go marshalling

handling - json.Marshal(struct) devuelve "{}"



print json golang (2)

Debe export los campos en TestObject al escribir en mayúscula la primera letra del nombre del campo. Cambia kind to Kind y así sucesivamente.

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

El paquete de codificación / json y paquetes similares ignoran los campos no exportados.

Las cadenas `json:"..."` que siguen a las declaraciones de campo son etiquetas struct . Las etiquetas en esta estructura establecen los nombres de los campos de la estructura cuando se calculan para y desde JSON.

playground

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 = "[email protected]" fmt.Println(testObject) b, err := json.Marshal(testObject) if err != nil { fmt.Println(err) } fmt.Println(string(b[:])) }

Aquí está el resultado:

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

¿Por qué el JSON está esencialmente vacío?


  • Cuando la primera letra está en mayúscula , el identificador es público para cualquier parte de código que desee utilizar.
  • Cuando la primera letra está en minúscula , el identificador es privado y solo se puede acceder dentro del paquete que se declaró.

Ejemplos

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 }