Мне трудно понять, как правильно разархивировать некоторые данные JSON, которые передаются в массив типа inteface, а затем использовать его.Я попытался сделать этот пример кода максимально простым, чтобы проиллюстрировать проблему, с которой я столкнулся.Код можно найти на игровой площадке здесь: https://play.golang.org/p/U85J_lBJ7Zr
Вывод выглядит так:
[map [ObjectType: идентификатор стула: 1234 Бренд: Blue Inc.] map [ID: 5678 Расположение: Кухня ObjectType: table]] {} false {} false
Код
package main
import (
"fmt"
"encoding/json"
)
type Chair struct {
ObjectType string
ID string
Brand string
}
type Table struct {
ObjectType string
ID string
Location string
}
type House struct {
Name string
Objects []interface{}
}
func main() {
var h House
data := returnJSONBlob()
err := json.Unmarshal(data, &h)
if err != nil {
fmt.Println(err)
}
fmt.Println(h.Objects)
s1, ok := h.Objects[0].(Table)
fmt.Println(s1, ok)
s2, ok := h.Objects[0].(Chair)
fmt.Println(s2, ok)
}
func returnJSONBlob() []byte {
s := []byte(`
{
"Name": "house1",
"Objects": [
{
"ObjectType": "chair",
"ID": "1234",
"Brand": "Blue Inc."
},
{
"ObjectType": "table",
"ID": "5678",
"Location": "Kitchen"
}
]
}
`)
return s
}