私はRubyでロック後にロックを打っていますが、私は戦い続けます。 今日私は属性を識別する問題があります。クラス属性のクラスを見つけるのに最適な方法
私はオブジェクトをJSONにシリアル化する作業をしています。私のオブジェクトは次のようになります。属性ItemsはItemオブジェクトが内部にあるオブジェクトで、アドレスはオブジェクトです。
module OrderSet
class OrderObject
attr_accessor :items, :url, :email, :address, :id
def initialize args = nil
if args != nil
args.each do |k, v|
instance_variable_set("@#{k}", v) unless v.nil?
end
end
end
def to_json
hash = {}
self.instance_variables.each do |var|
# [1..-1] is to get rid of the leading @ from instance variables. This is so the API knows the variables.
hash[var[1..-1]] = self.instance_variable_get var
end
hash.to_json
end
end
end
私はこれをシリアル化した場合、それは混乱して申し訳ありません。このようなJSON(で終わるが、それは有効なJSONでないとして、それはフォーマットしないだろう...:
"{"address":"{\"name\":\"Ruby\",\"line1\":\"StoneStreet\",\"city\":\"Gemstones\",\"country\":\"The WOrld\",\"postCode\":\"4004VC\"}","items":"[\"{\\\"productId\\\":\\\"canvas_a60x60\\\",\\\"files\\\":\\\"{\\\\\\\"content\\\\\\\":\\\\\\\"http://i.imgur.com/uHZfjIU.jpg\\\\\\\"}\\\",\\\"quantity\\\":10,\\\"pageCount\\\":1,\\\"metaData\\\":\\\"test\\\"}\"]","email":"[email protected]"}"
方法。
: は"{"address":"{"name":"Ruby", "line1":"StoneStreet", "city":"Gemstones", "country":"The WOrld", "postCode":"4004VC" }","items":"["{
"productId":"canvas_a60x60", "files":"{"content":"http://i.imgur.com/uHZfjIU.jpg" }","quantity":10, "pageCount":1, "metaData":"test" }"]", "email":"[email protected]" }"
今、各クラスは、独自のto_jsonをメソッドを持っている、それが呼び出されorigional to_jsonをメソッドのハッシュに置かれる必要がある、私はいくつかの解決策が出ている:それは見てする必要があります
object.is_a?(ClassName)
- を拡張、1つのベースオブジェクトを作るために(最初のものは仕方長い第2の1以上であるので、私は、合計で約20クラスを含む、4つのモジュールを持っている)
- モジュールをチェックしてくださいそれ以外のすべてのオブジェクトは、それがベースオブジェクトの子であるかどうかを確認し、それに応じてto_jsonを呼び出す(to_jsonを小道に入れて)
- 静的メソッドかもしれないが、
instance_variables
[編集] woops、質問をするのを忘れた、上記のいずれかよりも良い方法がありますか?そうでない場合は、上記のうちどれがベストですか?
これらの項目のクラスとJSONのシリアル化を確認することの関係は何ですか? –
@FrederickCheung属性内にあるクラス(独自の属性を持つ)が適切にシリアル化されないこと。提供されたJSONを見ると、バックスラッシュのボートロードが表示されます。これらは、自分のオブジェクトにのみ発生し、属性に追加されます。しかし、それは私が必要なものではありません。 私は指定されたJSONを有効にして、それをどのように見えるようにするかを指定します。その後、あなたは見ることができます。 –
あなたの出力は、to_jsonを呼び出して値がすでに生成されたハッシュに対してto_jsonを呼び出したかのように見えます。おそらく、子クラスのto_jsonの実装には問題があります。 –