From 637d86c42d9c969352384f98558d855a636b30fa Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 8 Nov 2015 16:28:18 -0800 Subject: [PATCH] json/parser: can parse lists of objects --- json/parser/parser.go | 7 +++++++ json/parser/parser_test.go | 11 +++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/json/parser/parser.go b/json/parser/parser.go index 0bbd821..65d56c9 100644 --- a/json/parser/parser.go +++ b/json/parser/parser.go @@ -212,6 +212,13 @@ func (p *Parser) listType() (*ast.ListType, error) { l.Add(node) case token.COMMA: continue + case token.LBRACE: + node, err := p.objectType() + if err != nil { + return nil, err + } + + l.Add(node) case token.BOOL: // TODO(arslan) should we support? not supported by HCL yet case token.LBRACK: diff --git a/json/parser/parser_test.go b/json/parser/parser_test.go index 9c77daf..96f67ea 100644 --- a/json/parser/parser_test.go +++ b/json/parser/parser_test.go @@ -66,6 +66,10 @@ func TestListType(t *testing.T) { `"foo": ["123", 123]`, []token.Type{token.STRING, token.NUMBER}, }, + { + `"foo": ["123", {}]`, + []token.Type{token.STRING, token.LBRACE}, + }, } for _, l := range literals { @@ -84,8 +88,11 @@ func TestListType(t *testing.T) { tokens := []token.Type{} for _, li := range list.List { - if tp, ok := li.(*ast.LiteralType); ok { - tokens = append(tokens, tp.Token.Type) + switch v := li.(type) { + case *ast.LiteralType: + tokens = append(tokens, v.Token.Type) + case *ast.ObjectType: + tokens = append(tokens, token.LBRACE) } }