diff options
Diffstat (limited to 'json')
-rw-r--r-- | json/json.go | 16 | ||||
-rw-r--r-- | json/json_test.go | 8 |
2 files changed, 11 insertions, 13 deletions
diff --git a/json/json.go b/json/json.go index 4155bd2..7c84f42 100644 --- a/json/json.go +++ b/json/json.go @@ -21,23 +21,21 @@ var ( ret := map[string]interface{}{} for _, prop := range n.Children[1].Children { - ret[prop.Children[0].Token] = prop.Children[2].Result + ret[prop.Children[0].Result.(string)] = prop.Children[2].Result } return Node{Result: ret} }) - _null = Bind("null", nil) - _true = Bind("true", true) - _false = Bind("false", false) - - _string = Map(StringLit(`"`), func(n Node) Node { - return Node{Result: n.Token} - }) + _null = Bind("null", nil) + _true = Bind("true", true) + _false = Bind("false", false) + _string = StringLit(`"`) + _number = NumberLit() ) func init() { - value = Any(_null, _true, _false, _string, _array, _object) + value = Any(_null, _true, _false, _string, _number, _array, _object) } func Unmarshal(input string) (interface{}, error) { diff --git a/json/json_test.go b/json/json_test.go index 8f2e148..3cc7934 100644 --- a/json/json_test.go +++ b/json/json_test.go @@ -29,15 +29,15 @@ func TestUnmarshal(t *testing.T) { }) t.Run("array", func(t *testing.T) { - result, err := Unmarshal(`[true, null, false]`) + result, err := Unmarshal(`[true, null, false, -1.23e+4]`) require.NoError(t, err) - require.Equal(t, []interface{}{true, nil, false}, result) + require.Equal(t, []interface{}{true, nil, false, -1.23e+4}, result) }) t.Run("object", func(t *testing.T) { - result, err := Unmarshal(`{"true":true, "false":false, "null": null} `) + result, err := Unmarshal(`{"true":true, "false":false, "null": null, "number": 404} `) require.NoError(t, err) - require.Equal(t, map[string]interface{}{"true": true, "false": false, "null": nil}, result) + require.Equal(t, map[string]interface{}{"true": true, "false": false, "null": nil, "number": int64(404)}, result) }) } |