首页 > 解决方案 > 将json解组到结构时如何不允许空字段

问题描述

我的请求确实有这个结构

type RequestBody struct {
    ForkliftID  string `json:"forklift_id"`
    WarehouseID string `json:"warehouse_id,omitempty"`
    TaskID      string `json:"task_id"`
}

如果我不在"forklift_id"json 请求正文中发送,解组分配“”而不返回错误,我想知道是否有类似的东西

`json: "forklift_id,notempty"`

因此,如果该字段不存在或为空,则解组会返回错误。

提前致谢

标签: jsongo

解决方案


我假设您所做的(将有效负载中的空值视为错误)是出于验证目的。如果是这样,我认为您可以使用@colminator 答案,或者尝试使用旨在解决此特定问题的第 3 方库。一个示例库是https://github.com/go-playground/validator

type RequestBody struct {
    ForkliftID  string `json:"forklift_id"  validate:"required"`
    WarehouseID string `json:"warehouse_id" validate:"required"`
    TaskID      string `json:"task_id"`
}

// ...

var payload RequestBody 

// ...

validate := validator.New()
err := validate.Struct(payload)
if err != nil {
    // handle the error
}

validate:"required"调用时将验证带有标签的字段validate.Struct()

除了required.

有关更详细的示例,请查看示例源代码


另一种替代解决方案是通过对这些结构的字段执行显式检查。例子:

// ...

if payload.ForkliftID == "" {
     err = fmt.Errorf("Forklift ID cannot be empty")
}
if payload.WarehouseID == "" {
     err = fmt.Errorf("Warehouse ID cannot be empty")
}

推荐阅读