Подтвердить что ты не робот

Кодировать строку Ruby в строку JSON

Драйвер json не позволяет прямо кодировать строки в их представлении JSON. Я предварительно портировал этот код PHP:

$text = json_encode($string);

для этого Ruby:

text = string.inspect

и, похоже, он выполнил эту работу, но по какой-то причине, если сама string содержит литеральную строку (это фактически JS-код) с символами новой строки, эти строки новой строки \n будут оставаться как-есть \n, а не закодированы до \\n. Я понимаю, что это правильное поведение #inspect, но...

Как кодировать строковое значение в его представлении JSON в Ruby?

4b9b3361

Ответ 1

С Ruby 2.1 вы можете

require 'json'

'hello'.to_json

Ответ 2

Это работает со стандартной библиотекой 1.9.3+ JSON:

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

Без quirks_mode: true вы получите смешное "JSON:: GeneratorError: разрешено только создание объектов JSON или массивов".

Ответ 3

Существует множество драгоценных камней JSON для Ruby, некоторые чистые Ruby, основанные на C, для лучшей производительности.

Вот тот, который предлагает как pure-Ruby, так и C: http://flori.github.com/json/

И тогда его существенно:

require 'json'
JSON.encode(something)

Популярным кодером/декодером JSON с собственными C-привязками для производительности является Yajl: https://github.com/brianmario/yajl-ruby

UPD от @Stewart: JSON.encode обеспечивается рельсами как object.to_json. Для использования вне рельсов используйте JSON.generate, который находится в ruby ​​1.9.3 std-lib. - Стюарт