增加生成新节点的方法
This commit is contained in:
parent
055c833fce
commit
f24fe13e4b
@ -27,6 +27,8 @@ const (
|
||||
const (
|
||||
// ValueTypeString 字符串类型
|
||||
ValueTypeString = "string"
|
||||
// ValueTypeBool bool类型
|
||||
ValueTypeBool = "bool"
|
||||
// ValueTypeInteger int类型
|
||||
ValueTypeInteger = "int64"
|
||||
// ValueTypeFloat float类型
|
||||
@ -36,3 +38,12 @@ const (
|
||||
// ValueTypeArray 数组
|
||||
ValueTypeArray = "array"
|
||||
)
|
||||
|
||||
// isBaseDataType 是否为基础数据类型
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 23:16 2023/3/28
|
||||
func isBaseDataType(valueType string) bool {
|
||||
return valueType != ValueTypeArray && valueType != ValueTypeMap
|
||||
}
|
||||
|
@ -7,11 +7,62 @@
|
||||
// Date : 2023-03-28 18:42
|
||||
package tree
|
||||
|
||||
import "strings"
|
||||
|
||||
// New 生成一棵JSON树
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 18:42 2023/3/28
|
||||
func New(jsonData string) *Node {
|
||||
return nil
|
||||
func New(jsonData string) *Generate {
|
||||
jsonData = strings.TrimSpace(jsonData)
|
||||
g := &Generate{
|
||||
jsonData: jsonData,
|
||||
}
|
||||
if g.isArray() {
|
||||
g.root = &Node{
|
||||
IsVirtual: true,
|
||||
Value: nil,
|
||||
ValueType: "",
|
||||
Key: "",
|
||||
Show: false,
|
||||
ShowKey: "",
|
||||
AllowEdit: false,
|
||||
AllowChangeType: false,
|
||||
DefaultValue: nil,
|
||||
ParentNode: nil,
|
||||
PreBrotherNode: nil,
|
||||
LastBrotherNode: nil,
|
||||
SonNodeList: nil,
|
||||
}
|
||||
}
|
||||
return g
|
||||
}
|
||||
|
||||
// Generate ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 22:46 2023/3/28
|
||||
type Generate struct {
|
||||
root *Node
|
||||
jsonData string
|
||||
}
|
||||
|
||||
// isObject 整体是否为对象
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 22:51 2023/3/28
|
||||
func (g *Generate) isObject() bool {
|
||||
return strings.HasPrefix(g.jsonData, KeywordObjectStart)
|
||||
}
|
||||
|
||||
// isArray 整体是否为数组
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 22:51 2023/3/28
|
||||
func (g *Generate) isArray() bool {
|
||||
return strings.HasPrefix(g.jsonData, KeywordArrayStart)
|
||||
}
|
||||
|
73
tree/node.go
73
tree/node.go
@ -7,6 +7,12 @@
|
||||
// Date : 2023-03-28 18:12
|
||||
package tree
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/util"
|
||||
)
|
||||
|
||||
// Node 节点的数据结构
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
@ -27,3 +33,70 @@ type Node struct {
|
||||
LastBrotherNode *Node // 下一个兄弟节点
|
||||
SonNodeList []*Node // 子节点列表
|
||||
}
|
||||
|
||||
// NewNode 创建新节点
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 23:02 2023/3/28
|
||||
func NewNode(key string, value string, valueType string, parentNode *Node) *Node {
|
||||
n := &Node{
|
||||
IsVirtual: false,
|
||||
Value: value,
|
||||
ValueType: valueType,
|
||||
Key: key,
|
||||
Show: false,
|
||||
ShowKey: "",
|
||||
AllowEdit: false,
|
||||
AllowChangeType: false,
|
||||
DefaultValue: nil,
|
||||
ParentNode: parentNode,
|
||||
PreBrotherNode: nil,
|
||||
LastBrotherNode: nil,
|
||||
SonNodeList: nil,
|
||||
}
|
||||
|
||||
switch valueType {
|
||||
case ValueTypeString:
|
||||
n.Value = value
|
||||
case ValueTypeInteger:
|
||||
var v int64
|
||||
_ = util.ConvertAssign(&v, value)
|
||||
n.Value = v
|
||||
case ValueTypeFloat:
|
||||
var v float64
|
||||
_ = util.ConvertAssign(&v, value)
|
||||
n.Value = v
|
||||
case ValueTypeBool:
|
||||
n.Value = strings.ToLower(value) == "true"
|
||||
case ValueTypeMap:
|
||||
n.Value = map[string]interface{}{}
|
||||
n.SonNodeList = make([]*Node, 0)
|
||||
case ValueTypeArray:
|
||||
n.Value = []interface{}{}
|
||||
n.SonNodeList = make([]*Node, 0)
|
||||
}
|
||||
|
||||
// 处理 preBrother 和 lastBrother
|
||||
if parentNode.ValueType == ValueTypeMap || parentNode.ValueType == ValueTypeArray {
|
||||
// map 和 array 才有所谓的兄弟节点
|
||||
if len(parentNode.SonNodeList) > 0 {
|
||||
// 设置新节点的 pre 节点
|
||||
n.PreBrotherNode = parentNode.SonNodeList[len(parentNode.SonNodeList)-1]
|
||||
// 设置当前最后一个节点的 last 节点
|
||||
parentNode.SonNodeList[len(parentNode.SonNodeList)-1].LastBrotherNode = n
|
||||
}
|
||||
// 新节点追加到子节点末尾
|
||||
parentNode.SonNodeList = append(parentNode.SonNodeList, n)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
// NewVirtualNode 创建一个新的虚拟节点
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 23:08 2023/3/28
|
||||
func NewVirtualNode() *Node {
|
||||
return &Node{IsVirtual: true, SonNodeList: make([]*Node, 0)}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user