feat: Slice方法支持JSON字符串自动解析
当Slice()方法遇到字符串类型且内容以'['开头时,会自动尝试JSON解析为切片。 这使得处理JSON格式的数组字符串更加便捷。
This commit is contained in:
15
rfx.go
15
rfx.go
@@ -885,7 +885,7 @@ func (r *rfx) StringMap() map[string]any {
|
||||
}
|
||||
|
||||
// Slice 将当前值转换为 []any 切片
|
||||
func (r *rfx) Slice() []any {
|
||||
func (r *rfx) Slice() (result []any) {
|
||||
v := r.value
|
||||
for v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface {
|
||||
if v.IsNil() {
|
||||
@@ -893,11 +893,20 @@ func (r *rfx) Slice() []any {
|
||||
}
|
||||
v = v.Elem()
|
||||
}
|
||||
if !v.IsValid() || (v.Kind() != reflect.Slice && v.Kind() != reflect.Array) {
|
||||
|
||||
if !v.IsValid() {
|
||||
return nil
|
||||
} else if v.Kind() == reflect.String {
|
||||
if str := r.String(); len(str) >= 2 && str[0] == '[' {
|
||||
if err := json.Unmarshal([]byte(str), &result); err == nil {
|
||||
return result
|
||||
}
|
||||
}
|
||||
} else if v.Kind() != reflect.Slice && v.Kind() != reflect.Array {
|
||||
return nil
|
||||
}
|
||||
|
||||
result := make([]any, v.Len())
|
||||
result = make([]any, v.Len())
|
||||
for i := 0; i < v.Len(); i++ {
|
||||
elem := v.Index(i)
|
||||
for elem.Kind() == reflect.Ptr || elem.Kind() == reflect.Interface {
|
||||
|
||||
Reference in New Issue
Block a user