Невозможно распаковать строку в значение Go типа int64
У меня есть структура
type tySurvey struct {
Id int64 `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
Я делаю json.Marshal
записывать байты JSON в HTML-страницу. jQuery изменяет поле name
в объекте и кодирует объект с помощью jQueries JSON.stringify
и строки jQuery для столбца Go.
id
поле, закодированное как строка.
Отправлено: {"id":1}
Получено: {"id":"1"}
Проблема заключается в том, что json.Unmarshal
не может развязать JSON, поскольку id
больше не является целым числом.
json: cannot unmarshal string into Go value of type int64
Каков наилучший способ обработки таких данных? Я не хочу вручную конвертировать каждое поле. Я хочу написать компактный, бесплатный код.
Цитаты не так уж плохи. JavaScript не работает с int64.
Я хотел бы узнать простой способ развязать json со строковыми значениями в значениях int64.
Ответы
Ответ 1
Это обрабатывается добавлением ,string
к вашему тегу следующим образом:
type tySurvey struct {
Id int64 `json:"id,string,omitempty"`
Name string `json:"name,omitempty"`
}
Это можно найти примерно в середине документации для Marshal.
Обратите внимание, что вы не можете декодировать пустую строку, указав omitempty
, поскольку она используется только при кодировании.
Ответ 2
Sent: {"id":1} Received: {"id":"1"}
Давай исправим это.
Ваш случай → http post 'localhost:8080/users/blahblah' id=1
Измените это на ->
http post 'localhost:8080/users/blahblah' id:=1
Не нужно ничего делать "json:id,string"
, достаточно "json:id"
.
Удачи!