【发布时间】:2019-11-13 19:55:48
【问题描述】:
我无法验证传递给我的 POST 端点的 JSON 主体是否与为可接受的 JSON 主体创建的结构相匹配。任何帮助将不胜感激
type NewUser struct {
UserID string `json:"user_id"`
UserName string `json:"user_name"`
}
func AddUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
decoder := json.NewDecoder(r.Body)
var user NewUser
err := decoder.Decode(&user)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
user.UserID != NewUser.UserID{
http.Error(w, "error", http.StatusBadRequest),
}
}
【问题讨论】:
-
我认为你不需要那个,你不需要知道 json 是否与结构匹配,你只需要知道你所在的结构实例是否解码该json,表示“模型”的有效实例。但是,如果您确定需要将通过线路的内容限制为完全匹配,in structure,一些预定义的模式,那么您无法使用标准 encoding/json 库来做到这一点。您要么必须寻找第 3 方库,要么实现自己的 json-structure-matching 解决方案。
-
感谢您的洞察!
-
您无法检查“JSON 是否与结构匹配”。它正在将苹果与橙子进行比较。您可以序列化一个结构并查看您获得的 JSON 是否与您期望的 JSON 匹配,或者您可以将 JSON 反序列化为一个结构并查看您获得的结构是否与您期望的结构匹配。但是将结构与 JSON 进行比较就像将阿根廷与苹果派进行比较。