From 72a01e99468d8c88579e2030c45370c8c24b81cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BE=B7=E6=BB=A1?= Date: Sun, 14 Mar 2021 23:31:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BD=AC=E4=B8=BAJSONNodeTre?= =?UTF-8?q?e,=E5=A2=9E=E5=8A=A0=E5=AF=B9=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=A0=BC=E5=BC=8F=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- json/json_test.go | 14 ++++++++ json/parse.go | 83 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 json/parse.go 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 + } +}