Не удается unmarshal строку в Go значение типа int64

у меня есть struct

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 не удается unmarshal, что JSON, потому что id уже не целое.

json: cannot unmarshal string into Go value of type int64

что самый лучший путь к обрабатывать такие данные? Я не хочу вручную преобразовывать каждое поле. Я хочу написать компактный, без ошибок код.

котировки не так уж плохо. JavaScript не работает хорошо с int64.

Я хотел бы узнать простой способ unmarshal json со строковыми значениями в значениях int64.

2 ответов


это обрабатывается путем добавления ,string к вашему тегу следующим образом:

type tySurvey struct {
   Id   int64  `json:"id,string,omitempty"`
   Name string `json:"name,omitempty"`
}

Это можно найти примерно на полпути через документацию для Маршал.

обратите внимание, что вы не можете декодировать пустую строку, указав omitempty как он используется только при кодировании.


отправлено: {"id": 1} получено: {"id":"1"}

давайте исправим это.

ваш случай - > http post 'localhost: 8080 / users / blahblah' id=1

изменить на -> http post 'localhost: 8080 / users / blahblah' id:=1

нет необходимости делать" JSON: id,string "вещь, просто" json:id " достаточно. Удачи!