La cartographie des chaînes de plusieurs types pour les objets json?
Je veux créer une carte que je peux transformer en un objet json comme
{
"a": "apple",
"b": 2
}
mais golang précise que la carte de déclarer avec types, de sorte que je peux avoir la carte[string]de la chaîne ou de la carte[string]int. Comment puis-je créer un objet json comme ci-dessus?
Remarque: je ne sais pas quelles sont les données et/ou de types différents j'ai besoin jusqu'à l'exécution, ou quand j'ai besoin de créer l'objet json. Donc je ne peux pas il suffit de créer un objet comme
type Foo struct {
A string `json:"a"`
B int `json:"b"`
}
OriginalL'auteur Derek | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez toujours utiliser
interface{}
pour stocker n'importe quel type. Comme la documentation dans leencoding/json
dit:Juste faire ce qui suit:
m := map[string]interface{}{"a":"apple", "b":2, "c": ["foo", 2, "bar", false, {"baz": "bat", "moreFoo": 7}]}
Bien sûr! L'interface vide (
interface{}
) détient tout type, y compris les tableaux. Depuis votre tableau contient des types arbitraires en lui-même, il deviendra de type[]interface{}
Types d'Interface (dont
interface{}
est une spécifie pas de méthodes) peut occuper tous les types de sous-jacents, mais, comme tel, ils ajoutent de la gestion d'exécution en termes de l'utilisation de la mémoire (type supplémentaire de l'information est stockée au moment où sa valeur est convertie à une interface de valeur) et une partie de la transformation. Prix raisonnable à payer pour certains de la flexibilité dont vous avez peut-être utilisé à partir d'un langage dynamique, mais pas quelque chose à utiliser quand il n'y a aucune raison de le faire. Types d'Interface peut contenir tout type sous-jacent à l'exception d'un autre type d'interface. Cela comprend la plaine de type int, float64, mais aussi des tableaux, des cartes, des canaux, etc.OriginalL'auteur ANisus