add IgnoreEmptySliceWhere feature for package gdb; add OriginValueAndKind/OriginTypeAndKind functions for package internal/utils

This commit is contained in:
John Guo
2021-10-28 23:18:23 +08:00
parent 493f5dcff2
commit 8ef4f68215
17 changed files with 450 additions and 211 deletions

View File

@ -259,13 +259,10 @@ func (j *Json) convertValue(value interface{}) interface{} {
case []interface{}:
return value
default:
rv := reflect.ValueOf(value)
kind := rv.Kind()
if kind == reflect.Ptr {
rv = rv.Elem()
kind = rv.Kind()
}
switch kind {
var (
reflectInfo = utils.OriginTypeAndKind(value)
)
switch reflectInfo.OriginKind {
case reflect.Array:
return gconv.Interfaces(value)
case reflect.Slice:

View File

@ -10,6 +10,7 @@ import (
"bytes"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/internal/utils"
"reflect"
"github.com/gogf/gf/v2/internal/json"
@ -68,14 +69,9 @@ func NewWithOptions(data interface{}, options Options) *Json {
}
default:
var (
rv = reflect.ValueOf(data)
kind = rv.Kind()
reflectInfo = utils.OriginTypeAndKind(data)
)
if kind == reflect.Ptr {
rv = rv.Elem()
kind = rv.Kind()
}
switch kind {
switch reflectInfo.OriginKind {
case reflect.Slice, reflect.Array:
i := interface{}(nil)
i = gconv.Interfaces(data)