From 1e3f6aeaa5bad08d777ea7807b279a07885dd8b2 Mon Sep 17 00:00:00 2001 From: tidwall Date: Thu, 2 Aug 2018 08:58:17 -0700 Subject: [PATCH] Fix leftover array and map values fixes #81 --- gjson.go | 6 ++++++ gjson_test.go | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/gjson.go b/gjson.go index 1da1552..74515ed 100644 --- a/gjson.go +++ b/gjson.go @@ -357,24 +357,30 @@ func (t Result) arrayOrMap(vc byte, valueize bool) (r arrayOrMapResult) { if (json[i] >= '0' && json[i] <= '9') || json[i] == '-' { value.Type = Number value.Raw, value.Num = tonum(json[i:]) + value.Str = "" } else { continue } case '{', '[': value.Type = JSON value.Raw = squash(json[i:]) + value.Str, value.Num = "", 0 case 'n': value.Type = Null value.Raw = tolit(json[i:]) + value.Str, value.Num = "", 0 case 't': value.Type = True value.Raw = tolit(json[i:]) + value.Str, value.Num = "", 0 case 'f': value.Type = False value.Raw = tolit(json[i:]) + value.Str, value.Num = "", 0 case '"': value.Type = String value.Raw, value.Str = tostr(json[i:]) + value.Num = 0 } i += len(value.Raw) - 1 diff --git a/gjson_test.go b/gjson_test.go index 867fae6..6333be7 100644 --- a/gjson_test.go +++ b/gjson_test.go @@ -1406,3 +1406,24 @@ func TestDuplicateKeys(t *testing.T) { t.Fatal("should be valid") } } + +func TestArrayValues(t *testing.T) { + var json = `{"array": ["PERSON1","PERSON2",0],}` + values := Get(json, "array").Array() + var output string + for i, val := range values { + if i > 0 { + output += "\n" + } + output += fmt.Sprintf("%#v", val) + } + expect := strings.Join([]string{ + `gjson.Result{Type:3, Raw:"\"PERSON1\"", Str:"PERSON1", Num:0, Index:0}`, + `gjson.Result{Type:3, Raw:"\"PERSON2\"", Str:"PERSON2", Num:0, Index:0}`, + `gjson.Result{Type:2, Raw:"0", Str:"", Num:0, Index:0}`, + }, "\n") + if output != expect { + t.Fatalf("expected '%v', got '%v'", expect, output) + } + +}