优化自动生成json #3
@ -27,6 +27,8 @@ const (
|
|||||||
const (
|
const (
|
||||||
// ValueTypeString 字符串类型
|
// ValueTypeString 字符串类型
|
||||||
ValueTypeString = "string"
|
ValueTypeString = "string"
|
||||||
|
// ValueTypeBool bool类型
|
||||||
|
ValueTypeBool = "bool"
|
||||||
// ValueTypeInteger int类型
|
// ValueTypeInteger int类型
|
||||||
ValueTypeInteger = "int64"
|
ValueTypeInteger = "int64"
|
||||||
// ValueTypeFloat float类型
|
// ValueTypeFloat float类型
|
||||||
@ -36,3 +38,12 @@ const (
|
|||||||
// ValueTypeArray 数组
|
// ValueTypeArray 数组
|
||||||
ValueTypeArray = "array"
|
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
|
// Date : 2023-03-28 18:42
|
||||||
package tree
|
package tree
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
// New 生成一棵JSON树
|
// New 生成一棵JSON树
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
//
|
//
|
||||||
// Date : 18:42 2023/3/28
|
// Date : 18:42 2023/3/28
|
||||||
func New(jsonData string) *Node {
|
func New(jsonData string) *Generate {
|
||||||
return nil
|
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
|
// Date : 2023-03-28 18:12
|
||||||
package tree
|
package tree
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.zhangdeman.cn/zhangdeman/util"
|
||||||
|
)
|
||||||
|
|
||||||
// Node 节点的数据结构
|
// Node 节点的数据结构
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
@ -27,3 +33,70 @@ type Node struct {
|
|||||||
LastBrotherNode *Node // 下一个兄弟节点
|
LastBrotherNode *Node // 下一个兄弟节点
|
||||||
SonNodeList []*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…
x
Reference in New Issue
Block a user