diff --git a/node.go b/node.go index 4891810..95f8e08 100644 --- a/node.go +++ b/node.go @@ -164,7 +164,7 @@ func parseValue(x interface{}, top *Node, level int) { case []interface{}: // JSON array for _, vv := range v { - n := &Node{Type: ElementNode, level: level, value: vv} + n := &Node{Data: top.Data, Type: ElementNode, level: level, value: vv} addNode(n) parseValue(vv, n, level+1) } diff --git a/node_test.go b/node_test.go index f4b968a..6dd0af8 100644 --- a/node_test.go +++ b/node_test.go @@ -133,3 +133,25 @@ func TestLargeFloat(t *testing.T) { t.Fatalf("expected %v but %v", "365823929453", n.InnerText()) } } + +func TestNestedArray(t *testing.T) { + s := `{ + "values": [ + [ + 1, + 2, + 3 + ] + ] + }` + doc, err := parseString(s) + if err != nil { + t.Fatal(err) + } + + expected := `123` + xml := doc.OutputXML() + if xml != expected { + t.Fatalf("expected %q but got %q", expected, xml) + } +}