#json #go
#json #Вперед
Вопрос:
Я хочу преобразовать a map[int]string
в json
, поэтому я подумал json.Marshal()
, что это сработает, но не удается указать неподдерживаемый тип map[int]string
. Но тогда как, если я использую строку map
с ключом, она работает нормально.
http://play.golang.org/p/qhlS9Nt8qQ
Позже при проверке кода маршаллера выполняется явная проверка, чтобы убедиться, что ключ не является строковым и возвращает UnsupportedTypeError
…
Почему я даже не могу использовать примитивы в качестве ключей? Если стандарт json не разрешает нестроковые ключи, не json.Marshal
следует преобразовывать примитивы в строку и использовать их в качестве ключей?
Комментарии:
1. В документах пакета указано следующее: «Значения карты кодируются как объекты JSON. Тип ключа карты должен быть строковым; ключи объекта используются непосредственно как ключи карты «. golang.org/pkg/encoding/json/#Marshal
Ответ №1:
Это не из-за Go, а из-за Json: Json не поддерживает ничего, кроме строк для ключей.
Взгляните на грамматику Json:
pair
string : value
string
""
" chars "
Полная грамматика доступна на веб-сайте Json.
К сожалению, чтобы использовать целые числа в качестве ключей, вы должны предварительно преобразовать их в строку, например, используя strconv.Itoa
: выполнение этой работы не зависит от json
пакета.
Комментарии:
1. Похоже, что более новые версии go поддерживают нестроковые ключи. «Значения карты кодируются как объекты JSON. Тип ключа карты должен быть либо строковым, либо целочисленным типом, либо реализовывать кодировку. TextMarshaler.»