Encode a Ruby string to a JSON string

纵然是瞬间 提交于 2019-12-23 06:48:56

问题


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?


回答1:


As of Ruby 2.1, you can

require 'json'

'hello'.to_json



回答2:


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




回答3:


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



来源:https://stackoverflow.com/questions/6783988/encode-a-ruby-string-to-a-json-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!