Вы можете использовать превосходную библиотеку mapstructure , которая преобразует map[string]interface{}
в желаемую структуру. Таким образом, вы можете просто JSON декодировать свои данные в интерфейс карты [string] {}, а затем декодировать эту карту в нужные вам структуры.
Пример:
package main
import (
"fmt"
"encoding/json"
"github.com/mitchellh/mapstructure"
)
func main() {
myJson := "{\"name\": \"someName\", \"age\": 20, \"job\": \"teacher\"}"
myMap := make(map[string]interface{})
err := json.Unmarshal([]byte(myJson), &myMap)
if err != nil {
panic(err)
}
person := &Person{}
adult := &Adult{}
err = mapstructure.Decode(myMap, person)
if err != nil {
panic(err)
}
fmt.Printf("Person: %#v\n", person)
err = mapstructure.Decode(myMap, adult)
if err != nil {
panic(err)
}
fmt.Printf("Adult: %#v\n", adult)
}
// Structs
type Person struct {
Name string `mapstructure:"name" json:"name"`
Age int `mapstructure:"age" json:"age"`
}
type Adult struct {
Person `mapstructure:",squash"`
Job string `mapstructure:"job" json:"job"`
}
См. это в действии в Go Детская площадка .