使用ruby json API,我想节省一些工作并从头开始生成ruby对象。有什么办法吗?
所以你可以改变这个:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
到此:
class Menu
attr_accessor :id
attr_accessor :file
attr_accessor :popup
end
答案 0 :(得分:3)
如果您希望将JSON字符串转换为Ruby Hash,则可以执行
my_hash = JSON.parse('{"foo":"bar"}')
puts my_hash['foo']
答案 1 :(得分:2)
这样做有一个很棒的宝石。 https://github.com/apotonick/representable/
以下是您可以表示的内容
module MenuRepresenter
include Representable::JSON
property :id
property :value
property :popup
end
创建模型
class Menu
attr_accessor :id, :value, :popup
end
menu = Menu.new.extend(MenuRepresenter).from_json(json)
# You can convert it back into json via .to_json
# expect(menu.to_json).to eq(json)
上面的示例仅显示了基本实现,您可能希望为菜单项创建另一个类,请查看github repo上的文档以获取更多详细信息。
答案 2 :(得分:1)
如果你想要使用访问器方法的“方法化”哈希(根本不是一个坏主意!)
require "ostruct"
object_like_hash = OpenStruct.new(some_hash_with_string_or_symbol_keys)
object_like_hash.foo #=> same as some_hash["foo"]
不存在的密钥将返回nil而不会不幸。
答案 3 :(得分:1)
我觉得你有点困惑。在这个问题中,您询问如何将JSON 文档转换为类。在评论中,您说您需要一个JDS版本的RXSD XML工具,然而,它将XML schemas 转换为Ruby类。
将JSON文档转换为类并没有多大意义。如果你将文档标记的世界与编程进行比较,文档对应于对象和模式对应于类(实际上,类型,实际上,但是因为我们讨论的是Ruby,所以不要打开那些蠕虫并坚持使用类)。 / p>
因此,从JSON文档生成Ruby对象是有意义的,从JSON模式生成Ruby类是有意义的,但从JSON文档生成Ruby类没有意义。坏消息当然是为了能够从JSON模式自动生成Ruby类,为了使其能够工作,JSON模式必须是可自动处理的(IOW机器可读)格式。
不幸的是,没有 JSON模式这样的东西,因此JSON模式往往不是机器可读的,而只是API上面向人类的英文文本的模糊Web服务提供商的文档页面。如果你很幸运。通常,没有关于JSON模式的文档 。
因此,由于没有标准化的方法来描述JSON模式,因此不存在用于处理JSON模式的标准化工具。与XML不同,其中标准化模式数量有限(DTD,XSD,RelaxNG)。
请注意,我上面写的内容并不完全正确:是 JSON模式的规范(例如JSON-Schema),并且有Ruby实现(例如Ruby/JSONSchema,仅验证,不生成类),但没有人使用它们,因此它们可能也不存在。