2011-07-21 19 views
17

La gema json no permite la codificación directa de cadenas para su representación JSON. Tentativamente portado este código PHP:Codifica una cadena de Ruby en una cadena JSON

$text = json_encode($string); 

a este Ruby:

text = string.inspect 

y parecía que hacer el trabajo, pero por alguna razón si el string en sí contiene una cadena literal (en realidad es el código JS) con líneas nuevas, estas nuevas líneas \n se quedarán como están \n, no codificadas en \\n. Puedo entender si este es el comportamiento correcto de #inspect, pero ...

¿Cómo se codifica un valor de cadena en su representación JSON en Ruby?

Respuesta

7

A partir de Rubí 2.1, puede

require 'json' 

'hello'.to_json 
3

Hay una gran cantidad de gemas JSON para Ruby, algunas de Ruby pura basadas en C para un mejor rendimiento.

Esta es la que ofrece tanto pura-Ruby y C: http://flori.github.com/json/

Y entonces su esencia:

require 'json' 
JSON.encode(something) 

Un popular JSON codificador/decodificador con el C-enlaces nativa para el rendimiento es Yajl: https://github.com/brianmario/yajl-ruby

UPD de @Stewart: JSON.encode es proporcionado por los carriles como i s object.to_json. Para usos fuera de los rieles, use JSON.generate que se encuentra en ruby ​​1.9.3 std-lib. - Stewart

+1

Como se mencionó, el 'joya json' __does no permiten cadenas de codificación directly__. Voy a echar un vistazo a un Yajl. –

+0

Para compatibilidad de joya JSON en yajl puede hacer 'require 'yajl/json_gem'' – mikeycgto

+10

Vale la pena señalar que esta respuesta supone que el cartel de pregunta está utilizando rieles (sin embargo, esto no estaba estipulado en la pregunta). 'JSON.encode' es provisto por rails como' object.to_json'. Para usos fuera de los rieles use 'JSON.generate' que está en ruby ​​1.9.3 std-lib. – Stewart

19

Esto funciona con el caldo de 1.9.3+ estándar JSON biblioteca:

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

Sin quirks_mode: true, se obtiene el "JSON :: GeneratorError: sólo en la producción de objetos JSON o matrices permitido" ridícula.

Cuestiones relacionadas