【发布时间】:2021-10-13 09:25:09
【问题描述】:
用例
我有一个 API,我在其中接收作为对象或对象数组的用户输入。像这样:
没有数组的 JSON
{
"sign": {
"page_no": 1,
"x_coord": 100,
"y_coord": 300
}
}
带有数组的 JSON
{
"sign": [
{
"page_no": 1,
"x_coord": 100,
"y_coord": 300
},
{
"page_no": 2,
"x_coord": 200,
"y_coord": 400
}
]
}
将结构解组为
type Document struct {
Sign []Sign `json:"sign"` // or just Sign
}
type Sign struct {
PageNo int `json:"page_no"`
XCoord int `json:"x_coord"`
YCoord int `json:"y_coord"`
}
由于遗留原因,我无法将Document 上的Sign 字段作为所有用户输入的数组,因此它需要既是Sign 的数组,又是Sign 的数组。
如何解组它以便它可以处理下面的两个 JSON 请求?
我知道...
我们可以使用map[string]interface{} 代替结构体,但这会导致在我使用结构体时您不必执行的太多关键断言,因为我可以利用它们的零值。
另外,this answer on Stackoverflow 似乎还可以,但我想知道有没有更好的方法?
【问题讨论】:
-
如果 JSON 是
Sign类型,您是否可以引入依赖或错误,并解码两次? -
链接的答案是如何做到这一点(实现
UnmarshalJSON()为*Sign)。遗留设计很糟糕,这就是后果。 -
相关视频在这里:youtu.be/vsN11YAEJHY?t=604
标签: arrays json go unmarshalling