From 014795081d9d4c632d49d502629f34505889d348 Mon Sep 17 00:00:00 2001 From: skanehira Date: Fri, 1 Nov 2019 19:52:50 +0900 Subject: [PATCH] fix save string number --- gui/gui.go | 29 +++++++++++++---------------- gui/tree.go | 30 ++++++++++++++++++++++-------- gui/type.go | 46 ++++++++++++++++++++++++++++++++++------------ 3 files changed, 69 insertions(+), 36 deletions(-) diff --git a/gui/gui.go b/gui/gui.go index a77fb48..08d0f08 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -196,20 +196,10 @@ func (g *Gui) SaveJSON() { } func (g *Gui) makeJSON(node *tview.TreeNode) interface{} { - nodeType := node.GetReference().(Type) + ref := node.GetReference().(Reference) children := node.GetChildren() - switch nodeType { - case Root: - if len(children) == 1 { - return g.makeJSON(children[0]) - } else { - var i []interface{} - for _, n := range children { - i = append(i, g.makeJSON(n)) - } - return i - } + switch ref.JSONType { case Object: i := make(map[string]interface{}) for _, n := range children { @@ -224,7 +214,7 @@ func (g *Gui) makeJSON(node *tview.TreeNode) interface{} { return i case Key: v := node.GetChildren()[0] - if v.GetReference().(Type) == Value { + if v.GetReference().(Reference).JSONType == Value { return g.parseValue(v) } return map[string]interface{}{ @@ -237,12 +227,19 @@ func (g *Gui) makeJSON(node *tview.TreeNode) interface{} { func (g *Gui) parseValue(node *tview.TreeNode) interface{} { v := node.GetText() - if i, err := strconv.Atoi(v); err == nil { + ref := node.GetReference().(Reference) + + switch ref.ValueType { + case Int: + i, _ := strconv.Atoi(v) return i - } else if f, err := strconv.ParseFloat(v, 64); err == nil { + case Float: + f, _ := strconv.ParseFloat(v, 64) return f - } else if b, err := strconv.ParseBool(v); err == nil { + case Boolean: + b, _ := strconv.ParseBool(v) return b } + return v } diff --git a/gui/tree.go b/gui/tree.go index c637bd6..bd3f2e6 100644 --- a/gui/tree.go +++ b/gui/tree.go @@ -30,11 +30,11 @@ func (t *Tree) UpdateView(g *Gui, i interface{}) { var root *tview.TreeNode switch r.Kind() { case reflect.Map: - root = tview.NewTreeNode("{object}").SetReference(Object) + root = tview.NewTreeNode("{object}").SetReference(Reference{JSONType: Object}) case reflect.Slice: - root = tview.NewTreeNode("{array}").SetReference(Array) + root = tview.NewTreeNode("{array}").SetReference(Reference{JSONType: Array}) default: - root = tview.NewTreeNode("{value}").SetReference(Key) + root = tview.NewTreeNode("{value}").SetReference(Reference{JSONType: Key}) } root.SetChildren(t.AddNode(i)) @@ -57,11 +57,11 @@ func (t *Tree) AddNode(node interface{}) []*tview.TreeNode { r := reflect.ValueOf(v) if r.Kind() == reflect.Slice { - newNode.SetReference(Array) + newNode.SetReference(Reference{JSONType: Array}) } else if r.Kind() == reflect.Map { - newNode.SetReference(Object) + newNode.SetReference(Reference{JSONType: Object}) } else { - newNode.SetReference(Key) + newNode.SetReference(Reference{JSONType: Key}) } log.Printf("key:%v value:%v value_kind:%v", k, v, newNode.GetReference()) @@ -74,7 +74,7 @@ func (t *Tree) AddNode(node interface{}) []*tview.TreeNode { r := reflect.ValueOf(n) if r.Kind() != reflect.Slice { objectNode := tview.NewTreeNode("{object}"). - SetChildren(t.AddNode(v)).SetReference(Object) + SetChildren(t.AddNode(v)).SetReference(Reference{JSONType: Object}) log.Printf("value:%v value_kind:%v", v, "object") nodes = append(nodes, objectNode) @@ -85,7 +85,21 @@ func (t *Tree) AddNode(node interface{}) []*tview.TreeNode { } default: log.Printf("value:%v value_kind:%v", node, "value") - nodes = append(nodes, t.NewNodeWithLiteral(node).SetReference(Value)) + ref := reflect.ValueOf(node) + var valueType ValueType + switch ref.Kind() { + case reflect.Int: + valueType = Int + case reflect.Float64: + valueType = Float + case reflect.Bool: + valueType = Boolean + default: + valueType = String + } + + nodes = append(nodes, t.NewNodeWithLiteral(node). + SetReference(Reference{JSONType: Value, ValueType: valueType})) } return nodes } diff --git a/gui/type.go b/gui/type.go index 138fb17..387049c 100644 --- a/gui/type.go +++ b/gui/type.go @@ -1,25 +1,47 @@ package gui -type Type int +type JSONType int const ( - Unknown Type = iota - Root + Root JSONType = iota + 1 Object Array Key Value ) -var TypeMap = map[Type]string{ - Unknown: "unknown", - Root: "root", - Object: "object", - Array: "array", - Key: "key", - Value: "value", +var jsonTypeMap = map[JSONType]string{ + Object: "object", + Array: "array", + Key: "key", + Value: "value", } -func (t Type) String() string { - return TypeMap[t] +func (t JSONType) String() string { + return jsonTypeMap[t] +} + +type ValueType int + +const ( + Int ValueType = iota + 1 + String + Float + Boolean +) + +var valueTypeMap = map[ValueType]string{ + Int: "int", + String: "string", + Float: "float", + Boolean: "boolean", +} + +func (v ValueType) String() string { + return valueTypeMap[v] +} + +type Reference struct { + JSONType JSONType + ValueType ValueType }