Golang: Unmarshal/Maréchal de json avec int set à 0 ne semble pas fonctionner

Je suis en train d'analyser un json objet dans un struct, mais entier valeurs à 0 ne fonctionne pas.

q := []byte(`{"string":"this is a string", "integer": 0}`)

type Test struct {
    String string `json:"string,omitempty"`
    Integer int `json:"integer,omitempty"`
}    

var qq Test
if err := json.Unmarshal(q, &qq); err != nil {
   panic(err)
}

queryStr, err := json.Marshal(qq)
if err != nil {
    panic(err)
}
fmt.Println(string(queryStr))
//Output: {"string": "this is a string"}

si j'ai mis l'entier à rien, mais 0, cela fonctionne bien.

même si je Unmarshal l'objet et de définir le champ Entier de 0, de Triage en arrière supprime le "entier" sur le terrain.

Pourquoi? et comment contourner ce problème?

MODIFIER:

de ce que je comprends les commentaires, omitempty se déclenche lorsque la valeur est 0. Alors maintenant, la disparition du sens.

Je suis parsing json, de l'éditer et de le transmettre à un autre service, ce qui est regrettable, d'autant que le terrain présente pas de défaut à d'autres valeurs que 0, et je préférerais ne pas avoir à l'alimentation dans les paramètres par défaut de l'aval de l'API.

Donc est-il possible d'omettre des valeurs vides mais gardez 0?

ou modifier vide de quelque chose d'autre?

Dois-je avoir 2 structures: l'une pour l'entrée et un pour la sortie?

vous avez omitempty, et 0 est la valeur vide.
j'ai besoin de omitemtpy que je ne peut pas avoir le champ tout mais j'ai aussi besoin de la valeur à 0. donc, il y a un moyen de contourner cela?
si le champ n'est pas présent, dans le programme, il est utilisé dans, la valeur par défaut d'une valeur qui n'est pas 0. Donc pas de champ par défaut-à-dire 10, mais j'ai besoin d'être en mesure de 0. Est-il moyen de définir une valeur par défaut pour une structure de champ?

OriginalL'auteur MrE | 2016-07-20