2013-04-23 13 views
5

Mam Java HashMap, że mam w JRuby, próbuję ją przekonwertować do formatu JSON, ale nie jego konwersja poprawnie, myślę, że ten przykład pokazuje problem:Jak przekonwertować Java Mapa do JSON w 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 
=> "\"{}\"" 

Jakieś pomysły, jak sobie z tym poradzić - czy muszę zmienić mapę w mapę Ruby?

Dzięki, Chris

Odpowiedz

4

Obecnie wydaje się, że masz rację, a json gem nie obsługuje HashMap, więc jedynym sposobem jest rzeczywiście przekonwertować ruby:

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

Może warto otworzyć ticket.

2

Mam ten sam problem, ale sposób obejścia to_hash nie działa, gdy obiekt java jest zagnieżdżony, patrz gist.

Udało mi się uruchomić go z klejnotem jrjackson i przenieść do multi_json, aby uniknąć zależności w konkretnej implementacji.

Mam problem z usługą JRuby pod numerem https://github.com/jruby/jruby/issues/1931