#json #go #marshalling
# #json #Вперед #маршалирование
Вопрос:
Я не уверен, является ли это ошибкой или особенностью, но json.Маршал не учитывает поля, которые не были повышены, потому что на верхнем уровне уже есть поле.
Например.
type Message struct {
Type string
Transaction
}
type Transaction struct {
Type string
}
m := amp;Message{
Type: "mType",
Transaction: Transaction{
Type: "txType",
},
}
fmt.Printf("% vn", m)
j, _ := json.Marshal(m)
fmt.Println(string(j))
очевидно, что дочернее поле «Тип» не повышается из-за сообщения.Тип уже есть. Но это выводит:
amp;{Type:mType Transaction:{Type:txType}}
{"Type":"mType"}
является json.Маршал, специально исключающий вложенное поле?
Ответ №1:
Оба Type
поля будут преобразованы в JSON в качестве Type
имени поля, а объект JSON не может содержать повторяющиеся ключи. Если вы добавите теги json в структуру и назовете поля по-другому, разоблачитель может создать действительный объект JSON, и он может маршалировать оба поля.