Я пытаюсь преобразовать структуру Go в JSON, используя json
пакет, но все, что я получаю, это {}
. Я уверен, что это нечто совершенно очевидное, но я этого не вижу.
package main
import (
"fmt"
"encoding/json"
)
type User struct {
name string
}
func main() {
user := &User{name:"Frank"}
b, err := json.Marshal(user)
if err != nil {
fmt.Printf("Error: %s", err)
return;
}
fmt.Println(string(b))
}
Затем, когда я пытаюсь запустить его, я получаю это:
$ 6g test.go && 6l -o test test.6 && ./test
{}
`json:"name"`
в конец определения структуры поля, чтобы сохранить выходное имя.Связанная проблема:
У меня возникли проблемы с преобразованием структуры в JSON, отправкой его в виде ответа от Golang, а затем перехватить то же самое в JavaScript через Ajax.
Потрачено много времени, поэтому выкладываю решение здесь.
На ходу:
В JavaScript:
Надеюсь, это кому-нибудь поможет.
Удачи.
источник
Структурные значения кодируются как объекты JSON. Каждое экспортированное поле структуры становится членом объекта, если:
Пустыми значениями являются false, 0, любой нулевой указатель или значение интерфейса, а также любой массив, срез, карта или строка нулевой длины. Строка ключа объекта по умолчанию - это имя структурного поля, но оно может быть указано в значении тега структурного поля. Ключ "json" в значении тега поля struct представляет собой имя ключа, за которым следует необязательная запятая и параметры.
источник
Вы можете определить свои собственные методы MarshalJSON и UnmarshalJSON и преднамеренно контролировать то, что должно быть включено, например:
источник