Ruby:如何将json解析为特定类型

Ruby:如何将json解析为特定类型,json,ruby,typesafe,Json,Ruby,Typesafe,我想用Ruby解析一个JSON。Ruby对我来说是全新的,但我必须使用它:-) 下面是我的小片段,应该可以进行解析: response = File.read("app/helpers/example_announcement.json") JSON.parse(response) 这个很好用。唯一的缺点是,我不知道我使用它时的属性,它不是类型安全的。所以我为它创建了对象 class Announcements @@announcements = Hash # a map key =&

我想用Ruby解析一个JSON。Ruby对我来说是全新的,但我必须使用它:-)

下面是我的小片段,应该可以进行解析:

response = File.read("app/helpers/example_announcement.json")
JSON.parse(response)
这个很好用。唯一的缺点是,我不知道我使用它时的属性,它不是类型安全的。所以我为它创建了对象

class Announcements
    @@announcements = Hash # a map key => value where key is string and value is type of  Announcement
end

class Announcement
    @@name = ""
    @@status = ""
    @@rewards = Array
end
这就是json的样子

{
  "announcements": {
    "id1" : {
      "name": "The Diamond Announcement",
      "status": "published",
      "reward": [
        {
          "id": "hardCurrency",
          "amount": 100
        }
      ]
    },
    "id2":   {
      "name": "The Normal Announcement",
      "players": [],
      "status": "published",
      "reward": []
    }
  }
}
所以我试着像这样解析JSON

response = File.read("app/helpers/example_announcement.json")
JSON.parse(response, Announcements)

但事情不是这样的^^有人能帮我吗?

你想实现什么?你在寻找什么样的最终结果?你说的“我不知道我使用它时的属性”是什么意思?(如果JSON是完全任意的,那么除了显示它之外,您没有什么安全的方法!!它不符合某些模式吗?)如果您只是想从JSON中创建一些“任意”结构,那么请忘记创建您自己的类(因为您“不知道JSON是什么格式”?);最好的方法是:
JSON.parse(response,object\u class:OpenStruct)
。但我再次问,你为什么要这样做?您希望实现什么?此外,ruby在类型安全方面并不真正起作用。Ruby非常相信duck类型,它允许固有的灵活性。如果您知道什么是
公告
,那么让它包装解析而不是解析并传递到其中可能更有意义。此外,大多数Ruby专家通常不推荐类变量
@
。请详细解释一下您的概念,解释一下为什么、如何以及您预期的用途。我们有一个后端运行的Scala,它定义了结构的外观。前端是用Ruby编写的。它从api端点读取数据。因为我们的前端开发人员不知道数据结构,所以我们希望实现一个生成器,从我们的Scala数据类型创建ruby类,使前端开发人员更容易理解他们将接收什么样的数据,但是如果ruby中没有这一概念,那么我们将使用API文档进行其他操作。正如我所说,我不是来自ruby世界,而是来自Scala,但我们继承了ruby前端^^