Вы можете использовать тип карты
var x map[string]interface{} // Adapt to match with the JSON structure
Или вы можете указать всю структуру вашего JSON
type Item struct {
Name string `json:"name,omitempty"`
Someint int `json:"Someint,omitempty"` // or string depend on the data type
Somefloat float32 `json:"somefloat,omitempty"` // or string depend on the data type
}
type Report struct {
Report []map[string][]Item `json:"report,omitempty"` // map[string] because it item1 so I assume it can be item2, item3...
}
Правильный код для ваших нужд:
package main
import (
"fmt"
"encoding/json"
)
func main() {
type Item struct {
Name string `json:"name,omitempty"`
Someint string `json:"Someint,omitempty"` // or int depend on the data type
Somefloat string `json:"somefloat,omitempty"` // or float32 depend on the data type
}
type Report struct {
Report []map[string][]Item `json:"report,omitempty"` // map[string] because it item1 so I assume it can be item2, item3...
}
var x Report
// If I print APICall.buff.Bytes() here I see the valid JSON object I want to parse.
if err := json.Unmarshal([]byte(`{
"report": [
{
"item1": [
{"name":"somename1", "someint":"1", "somefloat":"2.0"},
{"name":"somename2", "someint":"2", "somefloat":"3.0"}
],
"item2": [
{"name":"somename1", "someint":"1", "somefloat":"2.0"},
{"name":"somename2", "someint":"2", "somefloat":"3.0"}
]
}
]
}`), &x); err != nil {
fmt.Println(err)
}
fmt.Printf("%+v\n%+v", x, x.Report[0]["item1"][0])
}
Вывод:
{Report:[map[item1:[{Name:somename1 Someint:1 Somefloat:2.0} {Name:somename2 Someint:2 Somefloat:3.0}] item2:[{Name:somename1 Someint:1 Somefloat:2.0} {Name:somename2 Someint:2 Somefloat:3.0}]]]}
{Name:somename1 Someint:1 Somefloat:2.0}