Map json to structure with nested dictionaries
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]) }
{ "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 }
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) }
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}}
If you want the view
structure, you can also use mapstruct
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) }
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Default parameters in C++ provide the ability to specify default values for function parameters, thereby enhancing code readability, simplicity, and flexibility. Declare default parameters: Add the "=" symbol after the parameter in the function declaration, followed by the default value. Usage: When the function is called, if optional parameters are not provided, the default values will be used. Practical case: A function that calculates the sum of two numbers. One parameter is required and the other is optional and has a default value of 0. Advantages: Enhanced readability, increased flexibility, reduced boilerplate code. Note: It can only be specified in the declaration, it must be at the end, and the types must be compatible.

The restrict keyword is used to inform the compiler that a variable can only be accessed by a pointer, preventing undefined behavior, optimizing code and improving readability: Preventing undefined behavior when multiple pointers point to the same variable. To optimize code, the compiler uses the restrict keyword to optimize variable access. Improves code readability by indicating that variables can only be accessed by a pointer.

Templated programming improves code quality because it: Enhances readability: Encapsulates repetitive code, making it easier to understand. Improved maintainability: Just change the template to accommodate data type changes. Optimization efficiency: The compiler generates optimized code for specific data types. Promote code reuse: Create common algorithms and data structures that can be reused.

Alternatives to converting arrays to objects in PHP are: type cast: for example $obj=(object)$arr; using a custom class: define a class and assign values to properties through the constructor, for example newPerson($arr); use Third-party library: such as the Inflector::toObject() method provided by Doctrine\Common\Inflector\Inflector.

Answer: ORM (Object Relational Mapping) and DAL (Database Abstraction Layer) improve code readability by abstracting the underlying database implementation details. Detailed description: ORM uses an object-oriented approach to interact with the database, bringing the code closer to the application logic. DAL provides a common interface that is independent of database vendors, simplifying interaction with different databases. Using ORM and DAL can reduce the use of SQL statements and make the code more concise. In practical cases, ORM and DAL can simplify the query of product information and improve code readability.

The ref in Vue.js is used to establish references between templates and JavaScript code to: access DOM elements or component instances listen to DOM events dynamically create DOM and integrate with third-party libraries

Best practices for writing Go function documentation: Use GoDoc comments to embed documents and write descriptive summaries; provide detailed parameter documentation, including purpose, type, and expected value; write return result documentation, describing type, expected value, and meaning; provide code examples , showing function usage; test code on GoPlayground to ensure accuracy.

Function overloading is not allowed in the Go language for the following reasons: Simplify the compiler implementation Improve code readability and avoid name conflicts In Go, you can use variable parameter lists or interfaces to achieve behavior similar to function overloading.
