支持嵌套结构体验证 #1

Merged
zhangdeman merged 7 commits from feture/nested_struct into master 2025-03-21 23:44:47 +08:00
2 changed files with 16 additions and 10 deletions
Showing only changes of commit 0754f879e8 - Show all commits

View File

@ -15,7 +15,6 @@ import (
dynamicStructGenerate "git.zhangdeman.cn/zhangdeman/dynamic-struct" dynamicStructGenerate "git.zhangdeman.cn/zhangdeman/dynamic-struct"
"git.zhangdeman.cn/zhangdeman/json_filter/gjson_hack" "git.zhangdeman.cn/zhangdeman/json_filter/gjson_hack"
"git.zhangdeman.cn/zhangdeman/serialize" "git.zhangdeman.cn/zhangdeman/serialize"
"git.zhangdeman.cn/zhangdeman/wrapper"
"github.com/go-playground/validator/v10" "github.com/go-playground/validator/v10"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"github.com/tidwall/sjson" "github.com/tidwall/sjson"
@ -75,10 +74,9 @@ func (h *handle) Run() ([]byte, error) {
// 没出现异常, 但是value为nil, 视作参数不存在处理 // 没出现异常, 但是value为nil, 视作参数不存在处理
continue continue
} }
fieldName := wrapper.String(field.JsonTag).SnakeCaseToCamel()
// TODO : 支持嵌套结构体 // TODO : 支持嵌套结构体
fieldTag := h.generateTag(field) fieldTag := h.generateTag(field)
h.dynamicStruct.AddField(fieldName, "", sourceValue, fieldTag, false) h.dynamicStruct.AddField(field.JsonTag, "", sourceValue, fieldTag, false)
} }
val := h.dynamicStruct.Build().New() val := h.dynamicStruct.Build().New()
if err := serialize.JSON.UnmarshalWithNumber([]byte(h.formatVal), &val); nil != err { if err := serialize.JSON.UnmarshalWithNumber([]byte(h.formatVal), &val); nil != err {

View File

@ -16,11 +16,19 @@ import (
// TestRun_Simple_Data 无嵌套、无复杂数据类型的处理 // TestRun_Simple_Data 无嵌套、无复杂数据类型的处理
func TestRun_Simple_Data(t *testing.T) { func TestRun_Simple_Data(t *testing.T) {
testMap := map[string]any{ userInfo := map[string]any{
"age": 18, "age": 1800,
"height": 179.5, "height": 179.5,
"name": "baicha", "name": "baicha",
} }
companyInfo := map[string]any{
"address": "beijing",
}
testMap := map[string]any{
"user": userInfo,
"company": companyInfo,
}
sourceByteData, _ := json.Marshal(testMap) sourceByteData, _ := json.Marshal(testMap)
fieldList := []StructField{ fieldList := []StructField{
{ {
@ -34,15 +42,15 @@ func TestRun_Simple_Data(t *testing.T) {
}, },
{ {
Tag: "max", Tag: "max",
Args: []string{"20"}, Args: []string{"2000"},
}, },
}, },
DefaultValue: "", DefaultValue: "",
SourcePath: "age", SourcePath: "user.age",
TargetPath: "user_age", TargetPath: "user_age",
Errmsg: "年龄必须在[1,20]之间", Errmsg: "年龄必须在[1,2000]之间",
}, },
} }
_, err := Run(sourceByteData, fieldList) res, err := Run(sourceByteData, fieldList)
fmt.Println(err) fmt.Println(err, string(res))
} }