Posted about 9 years ago. Visible to the public. Linked content.

How to fix: "unexpected token" error for JSON.parse

When using the json gem Archive , you might run into this error when using JSON.parse:

>> 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.

While 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.

How to fix it

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 first).

How to work around the problem

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"

Prefer using to_json on objects that can be parsed back over this workaround.

makandra has been working exclusively with Ruby on Rails since 2007. Our laser focus on a single technology has made us a leader in this space.

Owner of this card:

Arne Hartherz
Last edit:
about 9 years ago
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Arne Hartherz to makandra dev
This website uses short-lived cookies to improve usability.
Accept or learn more