将Ruby字符串编码为JSON字符串

时间:2011-07-21 23:17:30

标签: ruby string json escaping

json gem不允许将字符串直接编码为其JSON表示。我暂时移植了这个PHP代码:

$text = json_encode($string);

这个Ruby:

text = string.inspect

它似乎完成了这项工作,但出于某种原因,如果string本身包含带换行符的文字字符串(实际上是JS代码),这些换行符\n将保持原样{{1 },不能编码为\n。我能理解这是\\n的正确行为,但是......

如何在Ruby中将字符串值编码为其JSON表示?

3 个答案:

答案 0 :(得分:19)

这适用于股票1.9.3+标准库JSON:

require 'json'
JSON.generate('foo', quirks_mode: true) # => "\"foo\""

没有quirks_mode: true,你会得到荒谬的“JSON :: GeneratorError:只允许生成一代JSON对象或数组”。

答案 1 :(得分:11)

从Ruby 2.1开始,你可以

require 'json'

'hello'.to_json

答案 2 :(得分:3)

Ruby中有无数的JSON宝石,一些基于C的纯Ruby,以获得更好的性能。

这是一个既提供纯Ruby又提供C: http://flori.github.com/json/

然后它本质上是:

require 'json'
JSON.encode(something)

一个流行的JSON编码器/解码器,具有用于提高性能的本机C绑定:Yajl:https://github.com/brianmario/yajl-ruby

@Stewart的UPD : 导轨JSON.encodeobject.to_json提供。对于rails之外的用途,请使用ruby 1.9.3 std-lib中的JSON.generate。 - 斯图尔特