¿Por qué el JSON incorporado de Ruby no deserializa las primitivas JSON simples, y cómo puedo solucionarlo?Deserializar primitivas JSON con la biblioteca Ruby JSON incorporada
irb(main):001:0> require 'json'
#=> true
irb(main):002:0> objects = [ {}, [], 42, "", true, nil ]
#=> [{}, [], 42, "", true]
irb(main):012:0> objects.each do |o|
irb(main):013:1* json = o.to_json
irb(main):014:1> begin
irb(main):015:2* p JSON.parse(json)
irb(main):016:2> rescue Exception => e
irb(main):017:2> puts "Error parsing #{json.inspect}: #{e}"
irb(main):018:2> end
irb(main):019:1> end
{}
[]
Error parsing "42": 706: unexpected token at '42'
Error parsing "\"\"": 706: unexpected token at '""'
Error parsing "true": 706: unexpected token at 'true'
Error parsing "null": 706: unexpected token at 'null'
#=> [{}, [], 42, "", true, nil]
irb(main):020:0> RUBY_DESCRIPTION
#=> "ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]"
irb(main):022:0> JSON::VERSION
#=> "1.4.2"
Sugiero usar un contenedor de matriz en lugar de un contenedor de objetos, en caso de que el usuario quiera pasar 'symbolize_names: true' a' JSON.parse'. Con la matriz, el método para desenvolver el resultado no se ve afectado. – Phrogz
BTW, gran respuesta, citando el RFC. Mientras que el argumento que presenta lo hace parecer razonable, no es (en mi humilde opinión) razonable para 'JSON.parse (o.to_json)!= o' para valores simplemente serializables. – Phrogz
@Phrogz: Excelente punto, he parchado mi respuesta en consecuencia. Estoy de acuerdo en que no analizar los valores no-objeto/matriz es un poco pedante, especialmente en el mundo DWIM Ruby y especialmente por no haber documentado dicho comportamiento. –