数据转为JSONNodeTree,增加对数据源数据格式判断

This commit is contained in:
白茶清欢 2021-03-14 23:31:08 +08:00
parent 36d01f81c0
commit 72a01e9946
2 changed files with 97 additions and 0 deletions

View File

@ -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) {
}

83
json/parse.go Normal file
View File

@ -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
}
}