在红宝石中:
class Obj
attr_accessor :price
end
my_ruby_obj = Obj.new
把 my_ruby_obj.to_json
"\"#<Obj:0x1c9b018>\""
服务器将 my_ruby_obj.to_json 发送到浏览器(sinatra,使用 content_type :json)以响应 jquery ajax 请求(使用 $.get),该请求正确定义了 json 的返回类型,并启动了一个回调函数(数据),它执行以下操作:
console.log(data);
返回:
#<Obj:0x1c9b018>
现在我如何访问 javascript/jquery 中的“data.price”属性,就像我通常在 ruby 对象上访问它的属性一样?(“my_ruby_obj.price”)
我试过 console.log(data.price);
> Undefined
我觉得我在这里遗漏了一大块..我想这与 json 如何处理对象有关..
有什么帮助吗? 如果可能的话,我正在寻找使用 jquery 的正确方法。
谢谢
编辑: 试图了解发生了什么,我在回调中尝试了这个:
newdata = $.parseJSON(data);
但调试控制台停止显示:
> uncaught exception: Invalid JSON: #<Obj:0x1c9b018>
我确实在 ruby 对象上调用了 .to_json ,那为什么这么说呢?...
[[新编辑: ]]
似乎来自自定义类的对象的 ruby json 序列化不像我想象的那样工作:
从这里引用:https ://stackoverflow.com/a/4464721/988591
对于您自己的类中的对象,这将更加困难。对于下面的类, to_json 将产生类似
"\"#<A:0xb76e5728>\""
. 这可能是不可取的。为了有效地将您的对象序列化为 JSON,您应该创建自己的 to_json 方法。
示例如下...但是..哇...没有更简单的方法吗?