php Editor Strawberry Mapper json dans une structure avec des dictionnaires imbriqués est une méthode courante de traitement des données. En convertissant les données json en un dictionnaire imbriqué, nous pouvons utiliser et accéder aux données plus facilement. La structure des dictionnaires imbriqués peut fournir une manière plus flexible d'organiser les données, nous permettant ainsi de traiter plus efficacement des structures de données complexes. Dans les applications pratiques, mapper json à des dictionnaires imbriqués peut nous aider à mieux comprendre et traiter les données, et à améliorer la lisibilité et la maintenabilité du code. Qu'il s'agisse du traitement des données JSON renvoyées par les API ou de l'analyse des fichiers de configuration, le mappage de JSON à des dictionnaires imbriqués est une technique courante de traitement des données.
Je suis nouveau sur Golang. J'ai un fichier json avec une structure imbriquée que je souhaite analyser et remplir.
J'essaie d'utiliser une structure de carte pour essayer de remplir. J'ai pu le faire avec des structures simples. Mais quand il s'agit de tableau de dictionnaire (clé : struct). map[string]接口{}
似乎因 runtime 错误而失败:索引超出范围
.
J'ai essayé de faire ce qui suit avec l'exemple json ci-dessous.
type window struct { loc []int wrtc string label string } type view struct { windows []window } type views struct { views []view } type desktop struct { views []views `mapstructure:views` rotation_speed string `mapstructure:"rotationspeed" json:rotationspeed"` } func main() { file, _ := ioutil.readfile("test.json") data := desktop{} _ = json.unmarshal([]byte(file), &data) fmt.println("data: ", data.views[0]) }
{ "desktop": { "view": [{// configs for view1 "random_id1": { "loc": [0,0,640,360], "wrtc": "some string", "label": "window 1" }, "random_id213443": { "loc": [640,360,1280,720], "wrtc": "some string blah", "label": "window 2" }, // more windows with random ids.... }, { // configs for view2... } ], "rotationSpeed": 30 }
Étant donné que l'identifiant de la fenêtre est aléatoire, je ne peux pas le définir dans la structure.
J'ai essayé d'utiliser mapstruct:",squash"
mais cela a également semblé échouer.
Merci beaucoup pour toute aide que vous pouvez apporter.
@burak serdar a raison
Vous n'avez pas besoin d'une structure de carte. json unmarshalling peut résoudre ce problème.
Il y a de nombreuses erreurs dans votre code, telles que la structure, la majuscule, les "vues", etc.
Voici la démo :
package main import ( "encoding/json" "fmt" ) var data = ` { "desktop":{ "view":[ { "random_id1_1":{ "loc":[ 0, 0, 640, 360 ], "wrtc":"some string", "label":"window 1" }, "random_id1_2":{ "loc":[ 640, 360, 1280, 720 ], "wrtc":"some string blah", "label":"window 2" } }, { "random_id2_1":{ "loc":[ 0, 0, 640, 360 ], "wrtc":"some string", "label":"window 1" }, "random_id2_2":{ "loc":[ 640, 360, 1280, 720 ], "wrtc":"some string blah", "label":"window 2" } } ], "rotationspeed":30 } } ` type window struct { loc []int wrtc string label string } type desktop struct { view []map[string]window rotation_speed int `json:"rotationspeed" mapstructure:"rotationspeed"` } type config struct { desktop desktop } func main() { c := config{} json.unmarshal([]byte(data), &c) fmt.println("json.unmarshal: ", c) }
json.unmarshal: {{[map[random_id1_1:{[0 0 640 360] some string window 1} random_id1_2:{[640 360 1280 720] some s tring blah window 2}] map[random_id2_1:{[0 0 640 360] some string window 1} random_id2_2:{[640 360 1280 720] some string blah window 2}]] 30}}
Si vous souhaitez une view
structure, vous pouvez également utiliser mapstruct via "remain"
type Window struct { Loc []int Wrtc string Label string } type View struct { Windows map[string]Window `mapstructure:",remain"` } type Desktop struct { View []View Rotation_speed int `json:"rotationSpeed" mapstructure:"rotationSpeed"` } type Config struct { Desktop Desktop } func main() { c2 := Config{} m := map[string]interface{}{} _ = json.Unmarshal([]byte(data), &m) mapstructure.Decode(m, &c2) fmt.Println("mapstructure: ", c2) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!