One of the fields in my table has the JSON type so inside the model to save string there I need to do sth like:
create(modifications: string.to_json,
...
)
to display this on the view the modifications column is parsed by JSON.parse which gives me the error 784: unexpected token at '"test registrant history"'
Long story short:
2.4.5 :042 > json_test = 'testing the string'.to_json
=> "\"testing the string\""
2.4.5 :043 > JSON.parse(json_test)
JSON::ParserError: 784: unexpected token at '"testing the string"'
why is this happening? how do you make JSON from a string then?
[Edit]
I'm on Rails 5 and Ruby 2.4.5
CodePudding user response:
It's an issue on versions of json gem (<2). To avoid it you should use versions of json >2. So you might try to upgrade your rails version or just use quirks_mode: true.
JSON.parse(json_test, quirks_mode: true)
Here is a link to the issue on github json issue
CodePudding user response:
Remove .to_json.
You never need to manually convert anything to/from JSON in a Rails app* and doing so almost always creates issues with double encoding like storing a garbage string "{ \"foo\":\"bar\" }" instead of an object. The database adapters will automatically serialize/deserialize JSON columns if they are supported.
Also do not use store/searialize for this very reason.
