文档具有最小的键/值对元数据。在人员列表中,我们可以使用"name":"joe"
,或者我们可以拥有joe
的密钥。错误的关键是错误。
也许这个文档对于Go结构来说太过动态了?我也尝试过YAML,这就是结果问题。结构保持为空,因为它没有正确映射。
游乐场链接:https://play.golang.org/p/PGSjoKvNja
或者我是否需要滚动自己的UnmarshalJSON并为"动作"?提供条件(或切换)?如果是这样的话,那很好。我可以在那里进行强制和验证,遍历文档并检测有问题的泛型操作位是什么,然后创建一个正确类型的结构。
答案 0 :(得分:1)
如果数据不一致,正如@Adrian所说,你不应该去看我所展示的内容。
否则,您应该能够使用json-to-go生成的以下结构来解组您的字符串,这是一个非常有用的工具,可以从json中获取结构
type Custom struct {
Ball []struct {
Throw struct {
Strength string `json:"strength"`
} `json:"throw"`
} `json:"ball"`
Frisbee []struct {
Fling struct {
Curve string `json:"curve"`
} `json:"fling"`
Catch struct {
Trick string `json:"trick"`
Jump string `json:"jump"`
} `json:"catch"`
} `json:"frisbee"`
}
然后
func main() {
var c Custom
err := json.Unmarshal([]byte(input), &c )
if err != nil {
panic(err)
}
fmt.Println(input)
}
打印出来
{
"ball": [{
"throw": {
"strength": "60%"
}
}, {
"throw": {
"strength": "20%"
}
}],
"frisbee": [{
"fling": {
"curve": "left"
}
}, {
"catch": {
"trick": "behind back",
"jump": "sure"
}
}]
}
看看我设置的this Playground。
答案 1 :(得分:1)
这将是:
type AutoGenerated struct {
Ball []struct {
Throw struct {
Strength string `json:"strength"`
} `json:"throw"`
} `json:"ball"`
Frisbee []struct {
Fling struct {
Curve string `json:"curve"`
} `json:"fling,omitempty"`
Catch struct {
Trick string `json:"trick"`
Jump string `json:"jump"`
} `json:"catch,omitempty"`
} `json:"frisbee"`
}
当然,您可以为每个内联结构定义定义一个单独的类型。您可以使用this在线工具(用于生成上述数据结构)。