Подтвердить что ты не робот

Невозможно распаковать строку в значение 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.

4b9b3361

Ответ 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". Удачи!