调试动态数组
This commit is contained in:
parent
850866d6f5
commit
95946c187c
23
builder.go
23
builder.go
@ -167,6 +167,10 @@ func (b *builderImpl) addNestedField(nameArr []string, pkg string, typ any, tag
|
|||||||
jsonTag := nameArr[i]
|
jsonTag := nameArr[i]
|
||||||
fieldName := wrapper.String(jsonTag).SnakeCaseToCamel()
|
fieldName := wrapper.String(jsonTag).SnakeCaseToCamel()
|
||||||
parentName := strings.Join(nameArr[:i], ".")
|
parentName := strings.Join(nameArr[:i], ".")
|
||||||
|
if strings.HasSuffix(parentName, "."+ArraySplit) {
|
||||||
|
// 数组部分处理
|
||||||
|
continue
|
||||||
|
}
|
||||||
parentJsonTag := nameArr[i-1]
|
parentJsonTag := nameArr[i-1]
|
||||||
parentFieldName := wrapper.String(parentJsonTag).SnakeCaseToCamel()
|
parentFieldName := wrapper.String(parentJsonTag).SnakeCaseToCamel()
|
||||||
fieldTag := fmt.Sprintf(`json:"%s"`, parentJsonTag)
|
fieldTag := fmt.Sprintf(`json:"%s"`, parentJsonTag)
|
||||||
@ -238,8 +242,25 @@ func (b *builderImpl) Build() DynamicStruct {
|
|||||||
// 说明是顶层了
|
// 说明是顶层了
|
||||||
b.AddField(builderCfg.Field, "", builderCfg.Builder.Build().New(), builderCfg.Tag, false)
|
b.AddField(builderCfg.Field, "", builderCfg.Builder.Build().New(), builderCfg.Tag, false)
|
||||||
} else {
|
} else {
|
||||||
|
loopCnt := 0
|
||||||
|
buildInstance := builderCfg.Builder.Build()
|
||||||
|
val := buildInstance.New()
|
||||||
|
for {
|
||||||
// (非顶层) 父级结构存在, 将其追加到父级结构中即可, 向前看一步即为父级结构
|
// (非顶层) 父级结构存在, 将其追加到父级结构中即可, 向前看一步即为父级结构
|
||||||
b.nestedStructTable[strings.Join(parentNameArr[:len(parentNameArr)-1], ".")].Builder.AddField(builderCfg.Field, "", builderCfg.Builder.Build().New(), builderCfg.Tag, false)
|
parentName := strings.Join(parentNameArr[:len(parentNameArr)-1-loopCnt], ".")
|
||||||
|
if strings.HasSuffix(parentName, "."+ArraySplit) {
|
||||||
|
// 说明父级是数组
|
||||||
|
loopCnt++
|
||||||
|
val = reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf(val)), 1, 1).Interface()
|
||||||
|
fmt.Println(val)
|
||||||
|
// b.nestedStructTable[parentName].Builder.AddField(builderCfg.Field, "", val, builderCfg.Tag, false)
|
||||||
|
} else {
|
||||||
|
// 父级非数组
|
||||||
|
b.nestedStructTable[parentName].Builder.AddField(builderCfg.Field, "", val, builderCfg.Tag, false)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,23 +14,24 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func Test_dynamicStructImpl_New(t *testing.T) {
|
func Test_dynamicStructImpl_New(t *testing.T) {
|
||||||
instance := NewStruct().
|
instance := NewStruct(map[string]string{}).
|
||||||
/*AddField("Integer", "", 0, `json:"int"`, false).
|
/*AddField("Integer", "", 0, `json:"int"`, false).
|
||||||
AddField("Text", "", "", `json:"someText"`, false).
|
AddField("Text", "", "", `json:"someText"`, false).
|
||||||
AddField("Float", "", 0.0, `json:"double"`, false).
|
AddField("Float", "", 0.0, `json:"double"`, false).
|
||||||
AddField("Boolean", "", false, "", false).
|
AddField("Boolean", "", false, "", false).
|
||||||
AddField("Slice", "", []int{}, "", false).
|
AddField("Slice", "", []int{}, "", false).
|
||||||
AddField("Anonymous", "", "", `json:"-"`, false).*/
|
AddField("Anonymous", "", "", `json:"-"`, false).*/
|
||||||
AddField("user.base.age", "", 20, `json:"age"`, false).
|
AddField("user.[].base.age", "", 20, `json:"age"`, false).
|
||||||
AddField("user.base.name", "", "", `json:"name"`, false).
|
AddField("user.[].base.name", "", "", `json:"name"`, false).
|
||||||
AddField("user.job.address", "", "", `json:"address"`, false).
|
AddField("user.[].job.address", "", "", `json:"address"`, false).
|
||||||
AddField("user.job.company.name", "", "", `json:"name"`, false).
|
AddField("user.[].job.company.name", "", "", `json:"name"`, false).
|
||||||
Build()
|
Build()
|
||||||
|
|
||||||
val := instance.New()
|
val := instance.New()
|
||||||
|
testByte, _ := json.Marshal(val)
|
||||||
|
fmt.Println(string(testByte))
|
||||||
data := []byte(`
|
data := []byte(`
|
||||||
{
|
{"user": [{
|
||||||
"int": 123,
|
"int": 123,
|
||||||
"someText": "example",
|
"someText": "example",
|
||||||
"double": 123.45,
|
"double": 123.45,
|
||||||
@ -38,7 +39,7 @@ func Test_dynamicStructImpl_New(t *testing.T) {
|
|||||||
"Slice": [1, 2, 3],
|
"Slice": [1, 2, 3],
|
||||||
"user": {"job":{"address":"beijing","company":{"name":"unknown"}}, "base":{"age": 1800, "name":"baicha"}},
|
"user": {"job":{"address":"beijing","company":{"name":"unknown"}}, "base":{"age": 1800, "name":"baicha"}},
|
||||||
"Anonymous": "avoid to read"
|
"Anonymous": "avoid to read"
|
||||||
}
|
}]}
|
||||||
`)
|
`)
|
||||||
err := json.Unmarshal(data, &val)
|
err := json.Unmarshal(data, &val)
|
||||||
fmt.Println(err, val)
|
fmt.Println(err, val)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user