Convertir Go carte en json
J'ai essayé de convertir ma carte pour une chaîne json avec encoding/json
Maréchal, mais elle a abouti à une chaîne vide.
Voici mon code :
package main
import (
"encoding/json"
"fmt"
)
type Foo struct {
Number int `json:"number"`
Title string `json:"title"`
}
func main() {
datas := make(map[int]Foo)
for i := 0; i < 10; i++ {
datas[i] = Foo{Number: 1, Title: "test"}
}
jsonString, _ := json.Marshal(datas)
fmt.Println(datas)
fmt.Println(jsonString)
}
Mon résultat est :
map[9:{1 test} 2:{1 test} 7:{1 test} 3:{1 test} 4:{1 test} 5:{1 test} 6:{1 test} 8:{1 test} 0:{1 test} 1:{1 test}]
[]
Je ne sais vraiment pas où je me trompe. Je vous remercie pour votre aide.
- Merci de ne pas downvote sans donner un commentaire. Je pense que la question est une bonne question (+1): il contient tout le code, il contient une question précise, la sortie, ... C'est totalement dans le sujet et l'OP a fait beaucoup d'effort pour poser une bonne question. C'est vraiment une honte d'avoir les downvotes ici!
- Le problème ne proviennent du fait que l'OP explicitement ignore l'erreur, qui aurait répondu à la question imediately.
- Je suis clairement conscience que j'avais tort. Deux erreurs en une seule question. Vous pouvez être sûr que je ne vais pas les répéter.
Vous devez vous connecter pour publier un commentaire.
Si vous aviez pris l'erreur, tu aurais vu ceci:
La chose est que vous ne pouvez pas utiliser des nombres entiers comme les clés en JSON; il est interdit. Au lieu de cela, vous pouvez convertir ces valeurs à cordes à l'avance, par exemple en utilisant des
strconv.Itoa
.Voir ce post pour plus de détails: https://stackoverflow.com/a/24284721/2679935
Il raconte en fait ce qui est mal, mais vous avez ignoré parce que vous n'avez pas vérifier l'erreur renvoyée par
json.Marshal
.json: unsupported type: map[int]main.Foo
JSON spec ne supporte pas de rien, sauf des chaînes pour les clés de l'objet, tandis que le javascript ne pas être pointilleux à ce sujet, il est toujours illégal.
Vous avez deux options:
1 Utilisation
map[string]Foo
et de convertir l'indice en chaîne (à l'aide de l'esf.Le Sprint par exemple):2 il suffit juste d'utiliser une tranche (tableau javascript):
jeux
Depuis que cette question a été posée/dernière réponse, le soutien à la chaîne de types de clés pour les cartes de json Maréchal/UnMarshal a été ajoutée par le biais de l'utilisation de TextMarshaler et TextUnmarshaler interfaces ici. Vous pourriez mettre en œuvre ces interfaces pour vos types de clés et alors
json.Marshal
ne fonctionnent pas comme prévu.De sortie: