如何在jruby中将Java Map转换为json

6

我有一个Java的HashMap,现在想在JRuby中将其转换成JSON格式。但是转换后的结果不正确,我认为下面的例子展示了问题:

$ 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
=> "\"{}\""

有什么方法可以处理这个问题吗?我需要把地图转换成Ruby地图吗?
谢谢, Chris
2个回答

4

目前看起来你是对的,json gem不支持HashMap,因此唯一的方法确实是转换为Ruby:

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

也许值得开一个工单


2
我有同样的问题,但是当Java对象嵌套时,to_hash解决方法不起作用,请参见gist
我能够使用jrjackson gem让它正常工作,并移动到multi_json以避免特定实现中的依赖项。
我在JRuby上开了一个问题https://github.com/jruby/jruby/issues/1931

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接