Handling Arbitrary JSON Keys in Go Structs
Your JSON response contains varying keys that cannot be defined statically in a Go struct. To address this, consider using a map data structure that allows for dynamic key-value pairs.
Using a Map for Dynamic Keys
The following code defines a struct that uses a map to represent the arbitrary key-value pairs:
type Items map[string][]ImageUrl
Here, Items is a map that maps strings (the keys in the JSON) to slices of ImageUrl structs. Each ImageUrl struct represents a single image URL with its dimensions.
Sample Usage
This modified version of your code illustrates how to use the Items struct:
type ImageUrl struct { Url string Width, Height int } type Items map[string][]ImageUrl func main() { json := `{"items": [{"name": "thing", "image_urls": { "50x100": [{ "url": "http://site.com/images/1/50x100.jpg", "width": 50, "height": 100 }, { "url": "http://site.com/images/2/50x100.jpg", "width": 50, "height": 100 }], "200x300": [{ "url": "http://site.com/images/1/200x300.jpg", "width": 200, "height": 300 }], "400x520": [{ "url": "http://site.com/images/1/400x520.jpg", "width": 400, "height": 520 }] } } }` var items Items if err := json.Unmarshal([]byte(json), &items); err != nil { // Handle error } fmt.Println(items) // Prints the map containing the keys and values }
In this example, the json.Unmarshal function will automatically populate the Items map with the appropriate key-value pairs. You can then access and manipulate the data as needed.
Note: This approach assumes that the nested keys in your JSON are consistent. If that's not the case, you may need to employ more complex data structures, such as nested maps or slices of maps.
The above is the detailed content of How to Handle Arbitrary JSON Keys in Go Structs?. For more information, please follow other related articles on the PHP Chinese website!