2015-07-15 2 views
0

Здесь является Go площадка демонстрирует мою проблему: http://play.golang.org/p/2fq3Fg7rPgJSON Маршалинг производить неожиданные результаты

По существу, я пытаюсь JSON маршалом на структуру, содержащую пользовательский тип оберточной json.RawMessage. При использовании CustomType.MarshalJSON() я получаю ожидаемые результаты, но просто вызов json.Marshal в моей полной структуре не работает должным образом. См. Ссылку на детскую площадку для конкретного примера.

В чем причина этой разницы?

Есть ли способ иметь json.Marshal Работайте так, как я ожидаю?

ответ

2

Ваш код работает нормально, у вас просто есть одна небольшая ошибка.

// MarshalJSON returns the *j as the JSON encoding of j. 
func (j JsonText) MarshalJSON() ([]byte, error) { 
    return j, nil 
} // note i modified this so the receiver isn't a pointer 

Ваш код не работает, потому что это ваше определение вашего типа данных, которое обертывает JsonText;

// Example struct I want to marshal and unmarshal 
type TestData struct { 
    Field1 JsonText `json:"field_1"` 
} 

Но только *JsonText тип реализует интерфейс упаковщик в вашем коде. Таким образом, вы можете изменить типы в любом месте (я сделал это в MarshalJSON()), но они должны быть последовательными.

На детской площадке; http://play.golang.org/p/NI_z3bQx7a

+0

Благодарим вас. Получил его работу: http://play.golang.org/p/q1C1Ms8Od8 – tgrosinger

Смежные вопросы