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) + } + +}