Map json to structure with nested dictionaries

WBOY
Release: 2024-02-09 13:46:23
forward
1107 people have browsed it

将 json 映射为具有嵌套字典的结构

php Editor Strawberry Mapping json into a structure with nested dictionaries is a common data processing method. By converting json data into a nested dictionary, we can operate and access the data more conveniently. The structure of nested dictionaries can provide a more flexible way of organizing data, allowing us to process complex data structures more efficiently. In practical applications, mapping json to nested dictionaries can help us better understand and process data, and improve code readability and maintainability. Whether processing json data returned by APIs or parsing configuration files, mapping json to nested dictionaries is a common data processing technique.

Question content

I am new to golang. I have a json file with a nested structure that I want to parse and populate.

I'm trying to use a map structure to try to populate. I was able to do this with simple structures. But when it comes to dictionary array(key: struct). map[string]interface{} appears to fail with a runtime error: Index out of range .

I tried to do the following with the json example below.

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])
}
Copy after login
{
"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
}
Copy after login

Since the window id is random, I can't define it in the structure. I tried using mapstruct:",squash" but that also seems to fail.

Thank you very much for any help you can provide.

Solution

@burak serdar is right

You don't need a map structure. json unmarshalling can solve this problem.

There are many errors in your code, such as structure, capitalization, "views", etc.

The following is a demonstration:

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)
}
Copy after login
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}}
Copy after login

If you want the view structure, you can also use 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)
}
Copy after login

The above is the detailed content of Map json to structure with nested dictionaries. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!