我正在试图找到一些方法来禁止Go语言中任意的JSON键和字段。目前,如果我发送的有效载荷在struct中包含未声明的字段,服务将正常工作,并将Map实体描述的字段(如json:"id,omitempty"
)。例如:
type Foo struct {
Bar int `json:"id,omitempty"`
}
已接收JSON:
{
"id": 12,
"hey": "hey"
}
有谁能帮我找到跟踪负载中未知字段的方法吗?在这种情况下,我需要返回一个错误。
2条答案
按热度按时间ar7v8xwq1#
更新:
您可能需要使用
DisallowUnknownFields()
读取器来获取更多信息老答:
有一个golang 1.9的建议:proposal: some way to reject unknown fields in encoding/json.Decoder
在此之前,您可以尝试类似playground的代码(代码如下)。关键思想是将json解析为map[string]interface{},然后处理键。如果您有嵌套的结构体,这当然会变得更加复杂。
你甚至可以使用reflect直接从
Foo
结构体中获取允许的键来摆脱变量allowedFooKeys
。How to read struct fielddecorators?
uz75evzq2#
从Go 1.10开始,JSON解码器为此用例提供了
DisallowUnknownFields()
选项。您可以在此处找到完整的工作示例:
https://go.dev/play/p/HoGDIt8nJB7