The json
gem does not allow for directly encoding strings to their JSON representation. I tentatively ported this PHP code:
$text = json_encode($string);
to this Ruby:
text = string.inspect
and it seemed to do the job but for some reason if the string
itself contains a literal string (it's actually JS code) with newlines, these newlines \n
will stay as-is \n
, not be encoded to \\n
. I can understand if this is the correct behaviour of #inspect
, but...
How does one encode a string value to its JSON representation in Ruby?
As of Ruby 2.1, you can
require 'json'
'hello'.to_json
This works with the stock 1.9.3+ standard library JSON:
require 'json'
JSON.generate('foo', quirks_mode: true) # => "\"foo\""
Without quirks_mode: true
, you get the ridiculous "JSON::GeneratorError: only generation of JSON objects or arrays allowed".
There are a myriad of JSON gems for Ruby, some pure Ruby some C-based for better performance.
Here is one that offers both pure-Ruby and C:
http://flori.github.com/json/
And then its essentially:
require 'json'
JSON.encode(something)
A popular JSON encoder/decoder with native C-bindings for performance is Yajl: https://github.com/brianmario/yajl-ruby
UPD from @Stewart:
JSON.encode
is provided by rails as is object.to_json
. For uses outside of rails use JSON.generate
which is in ruby 1.9.3 std-lib. – Stewart