diff --git a/json/build.go b/json/build.go index 8705a7c..b997fa9 100644 --- a/json/build.go +++ b/json/build.go @@ -149,21 +149,54 @@ func (dj *DynamicJSON) buildTpl(root *JSONode, tplList *[]string, valList *[]int } } else { - *tplList = append(*tplList, "{") + if len(root.Child) == 0 { + + switch val := root.Value.(type) { + case string: + *valList = append(*valList, val) + if root.IsHasLastBrother { + *tplList = append(*tplList, "\"%v\",") + } else { + *tplList = append(*tplList, "\"%v\"") + + } + default: + if root.IsHasLastBrother { + *tplList = append(*tplList, "%v,") + } else { + *tplList = append(*tplList, "%v") + + } + *valList = append(*valList, root.Value) + } + } else { + *tplList = append(*tplList, "{") + } + } for _, node := range root.Child { dj.buildTpl(node, tplList, valList) } - if root.IsHasLastBrother { - *tplList = append(*tplList, "},") - } else { - if root.IsSlice { - *tplList = append(*tplList, "]") + if !root.IsIndexNode { + if root.IsHasLastBrother { + *tplList = append(*tplList, "},") } else { - *tplList = append(*tplList, "}") - + if root.IsSlice { + *tplList = append(*tplList, "]") + } else { + *tplList = append(*tplList, "}") + } + } + } else { + if len(root.Child) > 0 { + if root.IsHasLastBrother { + *tplList = append(*tplList, "},") + } else { + *tplList = append(*tplList, "}") + } } } + return tplList, valList } diff --git a/json/json_test.go b/json/json_test.go index bc71618..dafec96 100644 --- a/json/json_test.go +++ b/json/json_test.go @@ -26,5 +26,6 @@ func TestJSON(t *testing.T) { tree.SetValue("slice.[0].name", "zhang") tree.SetValue("slice.[1].name", "de") tree.SetValue("slice.[2].name", "man") + tree.SetValue("slice.[3]", "zhangdeman") fmt.Println(tree.String()) }