JSON Unmarshal: использование Unmarshaler и TextUnmarshaler
Поле структуры может взять на себя ответственность за разупорядочение данных JSON самостоятельно. В таком случае значение поля должно реализовывать интерфейс json.Unmarshaler, обеспечивающий объявление метода UnmarshalJSON.
Этот метод используется для делегирования ответственности за десортировку поля самому полю. Если Unmarshal найдет поле типа Unmarshaler, оно вызовет функцию UnmarshalJSON с данными JSON этого поля (даже для null), и это поле станет ответственным за инициализацию/назначение значения.
Пришло время поработать с кодом!
В приведенной выше программе значение поля Profile реализует интерфейс Unmarshaler. Эта программа дает следующий результат.
Если поле реализует интерфейс encoding.TextUnmarshaler, а значение поля JSON равно string, Unmarshal вызывает метод UnmarshalText этого значения со строкой без кавычек.