6

JRuby にある Java HashMap を持っています。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 マップに変換する必要がありますか?

ありがとう、クリス

4

2 に答える 2

4

現在、あなたは正しいようで、jsongem は をサポートしていないHashMapため、唯一の方法は実際に ruby​​ に変換することです。

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

チケットを開く価値があるかもしれません。

于 2013-04-24T11:13:47.323 に答える
2

私は同じ問題を抱えていますが、to_hash の回避策は、Java オブジェクトがネストされている場合には機能しません。 gist を参照してください

jrjackson gem で動作させることができ、特定の実装での依存関係を避けるために multi_json に移行しました。

https://github.com/jruby/jruby/issues/1931で JRuby の問題をオープンしました。

于 2014-08-29T11:36:40.060 に答える