Ruby 4.1 リファレンスマニュアル

module function JSON?.generate

generate(object, state = nil) -> StringRuby 1.9.3 から[permalink][rdoc][edit]

与えられたオブジェクトを一行の JSON 形式の文字列に変換して返します。

デフォルトでは、サイズが最小となる JSON 形式の文字列を生成します。また、循環参照のチェックを行います。JSON::NaN, JSON::Infinity, JSON::MinusInfinity を生成することもありません。

[PARAM] object:
JSON 形式の文字列に変換するオブジェクトを指定します。
[PARAM] state:
JSON::State または、to_hash や to_h メソッドでハッシュに変換可能なオブジェクトを指定できます。ハッシュを使用する場合指定可能なオプションは以下の通りです。
:indent

インデントに使用する文字列を指定します。デフォルトは空文字列です。

:space

a string that is put after, a : or , delimiter (default: '')

:space_before

a string that is put before a : pair delimiter (default: '')

:object_nl

a string that is put at the end of a JSON object (default: '')

:array_nl

a string that is put at the end of a JSON array (default: '')

:check_circular

真を指定した場合、生成するオブジェクトの循環をチェックします。この動作がデフォルトです。

:allow_nan

真を指定した場合、JSON::NaN, JSON::Infinity, JSON::MinusInfinity を生成することを許すようになります。偽を指定した場合、これらの値を生成しようとすると例外が発生します。デフォルトは偽です。

:max_nesting

入れ子になっているデータの最大の深さを指定します。偽を指定すると深さのチェックを行いません。デフォルトは 100 です。

:ascii_only

真を指定すると、ASCII 以外の文字を \uXXXX の形式にエスケープします。デフォルトは偽です。

:script_safe

真を指定すると、/ を \/ に、U+2028・U+2029 を \u2028・\u2029 にエスケープし、 JavaScript に埋め込んでも安全な JSON 形式の文字列を生成します。デフォルトは偽です。

:strict

真を指定すると、nil・true・false・Integer・Float・String・Array・Hash 以外のオブジェクトを to_json や to_s で変換せず、JSON::GeneratorError を発生させます。 Symbol は文字列として変換します。デフォルトは偽です。

:allow_duplicate_key

真を指定すると、キーを文字列に変換した結果が重複するハッシュ({foo: 1, "foo" => 2} など)をそのまま出力します。デフォルトは偽で、この場合は JSON::GeneratorError が発生します。

:sort_keys

真を指定すると、オブジェクト(ハッシュ)のキーを昇順に並べ替えます。 Proc を指定すると、その Proc で並べ替えます。詳しくは JSON::State#sort_keys= を参照してください。デフォルトは偽です。

:rfc8785

真を指定すると、[RFC8785] の JSON Canonicalization Scheme に従って正規化した JSON 形式の文字列を生成します。詳しくは JSON::State#rfc8785= を参照してください。デフォルトは偽です。

[EXCEPTION] JSON::GeneratorError:
JSON::NaN, JSON::Infinity,JSON::MinusInfinity を生成しようとした場合に発生します。
[EXCEPTION] JSON::CircularDatastructure:
与えられたオブジェクトが循環参照を持つ場合に発生します。
[EXCEPTION] JSON::GeneratorError:
:allow_duplicate_key が偽の場合(デフォルト)に、キーを文字列に変換した結果が重複するハッシュを変換しようとすると発生します。
[EXCEPTION] JSON::GeneratorError:
ASCII 以外のバイトを含む BINARY(ASCII-8BIT)エンコーディングの文字列を変換しようとすると発生します。
例
require "json"

p JSON.generate([1, 2, { name: "tanaka", age: 19 }])
# => "[1,2,{\"name\":\"tanaka\",\"age\":19}]"
json_state = JSON::State.new(space: " ")
p JSON.generate([1, 2, { name: "tanaka", age: 19 }], json_state)
# => "[1,2,{\"name\": \"tanaka\",\"age\": 19}]"
例 キーの重複と BINARY 文字列
require "json"

JSON.generate({foo: 1, "foo" => 2})                            # ~> detected duplicate key "foo" in {foo: 1, "foo" => 2} (JSON::GeneratorError)
JSON.generate({foo: 1, "foo" => 2}, allow_duplicate_key: true) # => "{\"foo\":1,\"foo\":2}"
JSON.generate(["é".b])                                         # ~> "\xC3" from ASCII-8BIT to UTF-8 (JSON::GeneratorError)

[SEE_ALSO] JSON::State, JSON?.pretty_generate