ArgumentError: 不明なフィールド エラー Ruby JSON.parse(json_string, object_class: XYZ)

概要

私の Ruby クラス Routeguide::Rectangle オブジェクトは次のようになります (lo 変数と hi 変数に注意してください。これらは Routeguide::Point クラスのオブジェクトです)

<Routeguide::Rectangle: lo: <Routeguide::Point: latitude: 400000000, longitude: -750000000>, hi: <Routeguide::Point: latitude: 420000000, longitude: -730000000>>`

このオブジェクトの正しい JSON 文字列があります。

json_string = '{"lo":{"latitude":400000000,"longitude":-750000000},"hi":{"latitude":420000000,"longitude":-730000000}}'

この JSON 文字列を再度解析して、次のような Routeguide::Rectangle クラス オブジェクトを作成する必要があります。

<Routeguide::Rectangle: lo: <Routeguide::Point: latitude: 400000000, longitude: -750000000>, hi: <Routeguide::Point: latitude: 420000000, longitude: -730000000>>`

これを実現するために以下のコードを使用しています。

JSON.parse(json_string, object_class: Routeguide::Rectangle)

しかし、それはJSON.parseメソッドでエラーを引き起こします: #<引数エラー: 不明なフィールド: 緯度>

スタックトレース:

[
  "/Users/psen/.rbenv/versions/2.7.7/lib/ruby/2.7.0/json/common.rb:156:in `[]='",
  "/Users/psen/.rbenv/versions/2.7.7/lib/ruby/2.7.0/json/common.rb:156:in `parse'",
  "/Users/psen/.rbenv/versions/2.7.7/lib/ruby/2.7.0/json/common.rb:156:in `parse'"
]

解決策

その json 文字列も生成していると仮定すると、JSON Additions の使用を検討できます。シリアル化と逆シリアル化を支援するにはカスタム追加を定義する必要があります。