web-dev-qa-db-ja.com

Ruby文字列をJSON文字列にエンコードする

json gemでは、文字列をJSON表現に直接エンコードすることはできません。私はこれを一時的に移植しましたPHPコード:

$text = json_encode($string);

このRubyに:

text = string.inspect

そしてそれは仕事をするように見えたが、何らかの理由でstring自体に改行付きのリテラル文字列(実際にはJSコード)が含まれている場合、これらの改行\nはそのまま\n\\nにエンコードしないでください。これが#inspectの正しい動作であるかどうかは理解できますが、...

Rubyで文字列値をJSON表現にエンコードするにはどうすればよいですか?

21

Ruby 2.1以降では、

require 'json'

'hello'.to_json
13
Thai

これは、ストック1.9.3+標準ライブラリJSONで動作します。

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

quirks_mode: trueがないと、とんでもない "JSON :: GeneratorError:JSONオブジェクトまたは配列の生成のみが許可されます"になります。

20
John

Rubyには無数のJSON gemがあり、純粋なRubyパフォーマンスを向上させるためにCベースのものがいくつかあります。

以下は、pure-RubyとCの両方を提供するものです。 http://flori.github.com/json/

そして本質的に:

require 'json'
JSON.encode(something)

パフォーマンスのためのネイティブCバインディングを備えた人気のあるJSONエンコーダー/デコーダーはYajlです: https://github.com/brianmario/yajl-Ruby

UPD from @StewartJSON.encodeは、Railsと同様にobject.to_jsonによって提供されます。 Rails use JSON.generate外で使用Ruby 1.9.3 std-lib。– Stewart

3
Cody Caughlan