将Marshal,PStore或其他Ruby解决方案用于非JSON对象
有人可能会奇怪,为什么像Ruby这样的完全反射性语言不能自动执行JSON生成和任意类的解析。
但是,除非坚持使用JSON类型,否则除了发送给其他正在运行的Ruby之外,没有其他地方可以发送或接收JSON对象。在那种情况下,我怀疑传统的看法是“忘记JSON,使用像核心类这样的本地Ruby接口
Marshal。
因此,如果您确实要将这些对象发送到PHP或非Ruby的对象,则应该使用Array等直接创建支持JSON的Ruby数据结构,然后使用JSON.generate直接处理这些对象。
如果只需要序列化,则可以使用
Marshal或
PStore。
更新:啊哈,好的,试试这个:
module AutoJ def auto_j h = {} instance_variables.each do |e| o = instance_variable_get e.to_sym h[e[1..-1]] = (o.respond_to? :auto_j) ? o.auto_j : o; end h end def to_json *a auto_j.to_json *a endend如果然后您
include AutoJ在每个班级中都应该使用DTRT。在您的示例中,这导致
{ "a": { "string_field1": "aa", "string_field2": "bb" }, "b": { "int_field3": 123, "string_field4": "dd" }}您可能希望将
auto_j方法更改为return
h.values而不是just
h,在这种情况下,您将获得:
[ ["aa", "bb"], [123, "dd"]]



