说我有以下json
{
"unknown": {
"knownArray": [
{"property": "somevalue", "otherproperty": false}
],
"otherKnownArray": [""]
}
}
我用以下结构表示此数据
type Model struct {
ObjectName string
KnownArray []KnownType `json:"knownArray"`
OtherKnownArray []string `json:"otherKnownArray"`
}
type KnownType struct {
Property string `json:"property1"`
Otherproperty bool `json:"otherproperty"`
}
做
var model Model
json.Unmarshal(content, &model)
不幸的是,不会反序列化任何json。
如何正确反序列化我的模型?
如何反序列化json,以便ObjectName =“ unknown”?
对于匿名json字段,我不太了解encoding / json的内部。
我也尝试过将模型包装在第三个“外部”模型中,但仍无法与匿名json字段一起使用。
答案 0 :(得分:2)
可以使用map [string] Model进行编码。 https://play.golang.org/p/QWXQZFjBgRB
package main
import (
"fmt"
"encoding/json"
)
type Model struct {
ObjectName string
KnownArray []KnownType `json:"knownArray"`
OtherKnownArray []string `json:"otherKnownArray"`
}
type KnownType struct {
Property string `json:"property"`
Otherproperty bool `json:"otherproperty"`
}
func main() {
jsonstring := `{
"unknown": {
"knownArray": [
{"property": "somevalue", "otherproperty": false}
],
"otherKnownArray": [""]
}
}`
a := make(map[string]Model)
json.Unmarshal([]byte(jsonstring), &a)
var m Model
for k, v := range(a) {
m = v
m.ObjectName = k
break
}
fmt.Println(m.ObjectName, m.KnownArray, m.OtherKnownArray)
}