Merge pull request '已知问题修复' (#7) from fetature/fix_parent_tag into master

Reviewed-on: #7
This commit is contained in:
白茶清欢 2025-04-29 14:58:00 +08:00
commit fc340b9417
2 changed files with 10 additions and 3 deletions

View File

@ -1,12 +1,13 @@
package dynamicstruct
import (
"fmt"
"git.zhangdeman.cn/zhangdeman/wrapper"
"reflect"
"strings"
)
const tagTpl = `json:"{TAG_NAME}" xml:"{TAG_NAME}" toml:"{TAG_NAME}" yaml:"{TAG_NAME}" ini:"{TAG_NAME}"`
type nestedStruct struct {
Field string
Builder IBuilder
@ -69,7 +70,7 @@ func (b *builderImpl) AddField(name string, pkg string, typ any, tag string, ano
if len(tag) == 0 {
arr := strings.Split(strings.TrimSuffix(name, ".[]"), ".")
// 没指定tag, 字段名称作为tag名称
tag = strings.ReplaceAll(`json:"{TAG_NAME}" xml:"{TAG_NAME}" toml:"{TAG_NAME}" yaml:"{TAG_NAME}" ini:"{TAG_NAME}"`, "{TAG_NAME}", arr[len(arr)-1])
tag = strings.ReplaceAll(tagTpl, "{TAG_NAME}", arr[len(arr)-1])
// tag = fmt.Sprintf(`json:"%s"`, name)
}
}
@ -121,7 +122,8 @@ func (b *builderImpl) addNestedField(nameArr []string, pkg string, typ any, tag
parentName := strings.Join(nameArr[:i], ".")
parentJsonTag := nameArr[i-1]
parentFieldName := wrapper.String(parentJsonTag).SnakeCaseToCamel()
fieldTag := fmt.Sprintf(`json:"%s"`, parentJsonTag)
// fieldTag := fmt.Sprintf(`json:"%s"`, parentJsonTag)
fieldTag := strings.ReplaceAll(tagTpl, "{TAG_NAME}", parentJsonTag)
if tagCfg, exist := b.structTagTable[parentName]; exist && len(tagCfg) > 0 {
fieldTag = tagCfg
}

View File

@ -106,6 +106,11 @@ func (oj *ownJson) generateStructField(rootPath string, currentName string, curr
if currentResult.IsArray() {
// 数组, 递归处理
arrList := currentResult.Array()
if len(arrList) == 0 {
// 空数组,无法判断类型,使用any
oj.structBuilder.AddField(structPath, "", []any{}, "", false)
return
}
if arrList[0].Type == gjson.True || arrList[0].Type == gjson.False {
oj.structBuilder.AddField(structPath, "", []bool{}, "", false)
return