Accessing Nested JSON Array in Golang After Unmarshalling
When working with JSON responses in Golang, you may encounter difficulties accessing elements of a nested JSON array. This can happen when trying to access a specific element within the "objects" array, resulting in an error like "type interface {} does not support indexing."
Cause of the Error
The error arises because interface variables in Go do not support indexing. When you decode the JSON payload into an interface variable, the JSON module represents arrays as []interface{} slices and dictionaries as map[string]interface{} maps.
Solution 1: Using Type Assertions
To access a specific element within the "objects" array, you can use type assertions to convert the interface variable to a concrete type. However, this approach requires error checking to handle cases where the type assertion fails.
<code class="go">objects := result["objects"].([]interface{}) first := objects[0].(map[string]interface{}) fmt.Println(first["ITEM_ID"])</code>
Solution 2: Decoding into a Structure
If the JSON payload has a known format, a more robust solution is to decode it directly into a custom structure. This allows you to define the expected structure, eliminating the need for type assertions and error handling.
<code class="go">type Result struct { Query string `json:"query"` Count int `json:"count"` Objects []struct { ItemId string `json:"ITEM_ID"` ProdClassId string `json:"PROD_CLASS_ID"` Available int `json:"AVAILABLE"` } `json:"objects"` } var result Result if err := json.Unmarshal(payload, &result); err != nil { panic(err) } fmt.Println(result.Objects[0].ItemId)</code>
By choosing the appropriate solution based on the specific use case, you can seamlessly access nested JSON arrays in Golang after unmarshalling.
The above is the detailed content of How to Access Nested JSON Arrays in Golang After Unmarshalling?. For more information, please follow other related articles on the PHP Chinese website!