2

これは予想される動作ですか?改行文字が失われることに注意してください。

ruby-1.9.2-p136 :001 > ActiveSupport::JSON.decode("{\"content\": \"active\n\nsupport\"}")
 => {"content"=>"active\nsupport"}

Unicode エスケープされた改行でも同じことが起こります。

ruby-1.9.2-p136 :002 > ActiveSupport::JSON.decode("{\"content\": \"active\u000a\u000asupport\"}")
 => {"content"=>"active\nsupport"}

Rails 3.0.3 を使用しています。

4

2 に答える 2

2

最終的にこのチケットに出くわしました: https://rails.lighthouseapp.com/projects/8994/tickets/3479-activesupportjson-fails-to-decode-unicode-escaped-newline-and-literal-newlines

これは ActiveSupport のバグで、Rails 3.0.5 で修正されるようです。今のところ、アクティブサポートにパッチを当てており、期待どおりに機能しています。

ruby-1.9.2-p136 :001 > ActiveSupport::JSON.decode("{\"content\": \"active\n\nsupport\"}")
 => {"content"=>"active\n\nsupport"}
于 2011-02-23T17:29:19.580 に答える
1

二重引用符を使用して JSON データの改行を表すには、改行をエスケープする必要があります。

ActiveSupport::JSON.decode("{\"content\": \"active\\n\\nsupport\"}")

そうしないと、JSONデータではなく JSONソースに改行が挿入されます。これも機能することに注意してください。

ActiveSupport::JSON.decode('{"content": "active\n\nsupport"}')

一重引用符を使用することで、JSON のソースにリテラル改行を挿入する必要がなくなります。

ActiveSupport がデフォルトでこれを処理する方法に注目するのは興味深いことです (デフォルトの JSON バックエンドは ですActiveSupport::JSON::Backends::Yaml)。jsongem をインストールし、JSON バックエンドをそれに変更して ( ActiveSupport::JSON.backend = 'JSONGem')、同じテキストをデコードしようとすると ( ActiveSupport::JSON.decode("{\"content\": \"active\\n\\nsupport\"}"))、次のようになります。

JSON::ParserError: 737: unexpected token at '{"content": "active

support"}'
于 2011-02-23T03:42:51.090 に答える