2013-04-23 36 views
5

Tôi có một HashMap Java mà tôi có trong JRuby, tôi đang cố gắng để chuyển nó sang JSON, nhưng nó không chuyển đổi một cách chính xác, tôi nghĩ rằng ví dụ này cho thấy vấn đề:Làm thế nào để chuyển đổi Java Map để JSON trong 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 
=> "\"{}\"" 

Bất kỳ ý tưởng nào về cách xử lý việc này - tôi có cần biến bản đồ thành bản đồ Ruby không?

Cảm ơn, Chris

Trả lời

4

Hiện nay, có vẻ như bạn nói đúng và json đá quý không hỗ trợ HashMap, vì vậy cách duy nhất thực sự là chuyển đổi sang ruby:

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

Nó có thể có giá trị mở một ticket.

2

Tôi có cùng sự cố, nhưng cách giải quyết to_hash không hoạt động khi đối tượng java được lồng nhau, xem gist.

Tôi đã có thể làm cho nó hoạt động với đá quý jrjackson và chuyển sang multi_json để tránh các phụ thuộc trong việc triển khai cụ thể.

Tôi đã mở một sự cố trong JRuby tại https://github.com/jruby/jruby/issues/1931

Các vấn đề liên quan