json.Marshal(struct) devuelve "{}"
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?
Debe exportar los campos en TestObject poniendo en mayúscula la primera letra del nombre del campo. Cambiar kind
a 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 encoding/json y paquetes similares ignoran los campos no exportados.
Las `json:"..."`
cadenas que siguen a las declaraciones de campo son etiquetas de estructura . Las etiquetas en esta estructura establecen los nombres de los campos de la estructura cuando se calculan hacia y desde JSON.
Ruégalo en el patio de recreo .
- Cuando la primera letra está en mayúscula , el identificador es público para cualquier fragmento de código que desee utilizar.
- Cuando la primera letra está en minúscula , el identificador es privado y solo se puede acceder a él dentro del paquete en el 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
}
en golang
en estructura la primera letra debe estar en mayúscula, ej. número de teléfono -> Número de teléfono
======= Agregar detalle
Primero, intento codificar así
type Questions struct {
id string
questionDesc string
questionID string
ans string
choices struct {
choice1 string
choice2 string
choice3 string
choice4 string
}
}
La compilación de golang no es un error y no muestra advertencia. Pero la respuesta es vacía porque algo
Después de eso, busqué en Google y encontré este artículo.
Artículo sobre tipos de estructuras y literales de tipos de estructuras, entonces... Intento editar el código.
//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
}
}
Es trabajo.
Espero ayuda.