diff --git a/json/json_test.go b/json/json_test.go index dafec96..e99b9f5 100644 --- a/json/json_test.go +++ b/json/json_test.go @@ -12,6 +12,11 @@ import ( "testing" ) +// TestJSON ... +// +// Author : go_developer@163.com<张德满> +// +// Date : 10:58 下午 2021/3/14 func TestJSON(t *testing.T) { tree := NewDynamicJSON() fmt.Println(tree.extraSliceIndex("[200]")) @@ -29,3 +34,12 @@ func TestJSON(t *testing.T) { tree.SetValue("slice.[3]", "zhangdeman") fmt.Println(tree.String()) } + +// TestType 判断数据类型断言 +// +// Author : go_developer@163.com<张德满> +// +// Date : 10:59 下午 2021/3/14 +func TestType(t *testing.T) { + +} diff --git a/json/parse.go b/json/parse.go new file mode 100644 index 0000000..ff4e58b --- /dev/null +++ b/json/parse.go @@ -0,0 +1,83 @@ +// Package json ... +// +// Description : 将复杂数据结构转化为 JSONNode 树 +// +// Author : go_developer@163.com<张德满> +// +// Date : 2021-03-14 10:40 下午 +package json + +import ( + "encoding/json" + "reflect" + + "github.com/go-developer/gopkg/util" +) + +// NewParseJSONTree 获取解析的实例 +// +// Author : go_developer@163.com<张德满> +// +// Date : 10:43 下午 2021/3/14 +func NewParseJSONTree(data interface{}) *ParseJSONTree { + return &ParseJSONTree{data: data} +} + +// ParseJSONTree 解析json树 +// +// Author : go_developer@163.com<张德满> +// +// Date : 10:41 下午 2021/3/14 +type ParseJSONTree struct { + data interface{} +} + +// Parse 解析数据 +// +// Author : go_developer@163.com<张德满> +// +// Date : 10:44 下午 2021/3/14 +func (pjt *ParseJSONTree) Parse() (*JSONode, error) { + return nil, nil +} + +// isLegalData 判断是否能转换成json结构, 只有slice/map/struct/能转换成slice或map的[]byte是合法的 +// +// Author : go_developer@163.com<张德满> +// +// Date : 10:46 下午 2021/3/14 +func (pjt *ParseJSONTree) isLegalData() bool { + val := reflect.ValueOf(pjt.data) + + switch val.Kind() { + case reflect.Slice: + // slice 情况下,对字节数组进行特殊判断 + var ( + byteData []byte + ok bool + err error + ) + if byteData, ok = pjt.data.([]byte); ok { + // 字节数组转map或者slice + if err = json.Unmarshal(byteData, &pjt.data); nil != err { + return false + } + return true + } + return true + case reflect.Map: + return true + case reflect.Struct: + // 结构体转为字符串处理 + fallthrough + case reflect.Ptr: + // 指针 + var err error + if pjt.data, err = util.StructToMap(pjt.data); nil != err { + return false + } + return true + default: + return false + } +}