web-dev-qa-db-fra.com

Impossible de récupérer la chaîne dans la valeur Go du type int64

J'ai struct

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

Je sais json.Marshal écrire des octets JSON dans une page HTML. jQuery modifie le champ name dans un objet et code l'objet à l'aide de jQueries JSON.stringify et la chaîne de messages jQuery est envoyée au gestionnaire Go.

id champ codé sous forme de chaîne.

Envoyé: {"id":1} Reçu: {"id":"1"}

Le problème est que json.Unmarshal ne parvient pas à disséminer ce JSON, car id n'est plus un entier.

json: cannot unmarshal string into Go value of type int64

Quel est le meilleur moyen de gérer de telles données? Je ne souhaite pas convertir manuellement tous les champs. Je souhaite écrire un code compact et sans bug.

Citations n'est pas trop mauvais. JavaScript ne fonctionne pas bien avec int64.

Je voudrais apprendre le moyen facile d'unmarshal json avec des valeurs de chaîne dans les valeurs int64.

29
Max

Ceci est géré en ajoutant ,string à votre tag comme suit:

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

Cela se trouve à peu près à mi-chemin de la documentation de Marshal .

Veuillez noter que vous ne pouvez pas décoder la chaîne vide en spécifiant omitempty car elle est uniquement utilisée lors de l'encodage.

49
Dmitri Goldring

Envoyé: {"id": 1} Reçu: {"id": "1"}

Réglons ça. 

Votre cas est -> http post 'localhost: 8080/users/blahblah' id = 1 

Changez-le en -> http post 'localhost: 8080/users/blahblah' id: = 1

Pas besoin de faire "json: id, string", juste "json: id" est suffisant . Bonne chance!

0
KaungMyatChanThar