2013-04-23 15 views
5

Ho un HashMap Java che ho in JRuby, sto cercando di convertirlo in JSON, ma la sua non convertire correttamente, penso che questo esempio mostra il problema:Come convertire Java Mappa per JSON in JRuby

$ irb                   [17:23:50] 
irb(main):001:0> require 'java' 
=> false 
irb(main):003:0> require 'json' 
=> true 
irb(main):005:0> h = java.util.HashMap.new() 
=> {} 
irb(main):006:0> x = {} 
=> {} 
irb(main):007:0> JSON.parse JSON.dump x 
=> {} 

irb(main):008:0> JSON.parse JSON.dump h 
JSON::ParserError: unexpected token at '"{}"' 
    from json/ext/Parser.java:251:in `parse' 
    from /Users/kimptoc/.rvm/rubies/jruby-1.7.3/lib/ruby/1.9/json/common.rb:155:in `parse' 
    from (irb):9:in `evaluate' 
    from org/jruby/RubyKernel.java:1066:in `eval' 
    from org/jruby/RubyKernel.java:1409:in `loop' 
    from org/jruby/RubyKernel.java:1174:in `catch' 
    from org/jruby/RubyKernel.java:1174:in `catch' 
    from /Users/kimptoc/.rvm/rubies/jruby-1.7.3/bin/irb:13:in `(root)' 
irb(main):010:0> JSON.dump h 
=> "\"{}\"" 

Qualche idea su come gestirlo - devo trasformare la mappa in una mappa di Ruby?

Grazie, Chris

risposta

4

Attualmente, sembra che tu abbia ragione e la gemma json non supporta HashMap, quindi l'unico modo è infatti quello di convertire in rubino:

> JSON.parse JSON.dump h.to_hash 
=> {} 

Può vale la pena aprire un ticket.

2

Ho lo stesso problema, ma la soluzione to_hash non funziona quando l'oggetto java è nidificato, vedere gist.

Sono riuscito a farlo funzionare con la gemma jrjackson e spostato a multi_json per evitare le dipendenze in un'implementazione specifica.

Ho aperto un problema in JRuby allo https://github.com/jruby/jruby/issues/1931