How to fix: "unexpected token" error for JSON.parse
When using the
>> json = 'foo'.to_json >> JSON.parse(json) JSON::ParserError: 757: unexpected token at '"foo"' from /.../gems/json-1.7.7/lib/json/common.rb:155:in `parse' from /.../gems/json-1.7.7/lib/json/common.rb:155:in `parse' from (irb):1
The error above happens because the JSON you supplied is invalid.
to_json does work correctly, the result itself is not JSON that can be parsed back, as that string element is not inside an object like a hash (i.e.
JSONObject) or array.
So, in order to fix that, use a valid object to build JSON from, e.g. an array:
>> JSON.parse([ 'foo' ].to_json).first => "foo"
When you do that, remember to select the record from the array after parsing (e.g. via
If you can't control the input, you may use the
quirks_mode option to work around the issue:
>> json = 'foo'.to_json >> JSON.parse(json, :quirks_mode => true) => "foo"
to_json on objects that can be parsed back over this workaround.