簡體   English   中英

從json文檔生成ruby類

[英]Generate ruby classes from json document

使用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

如果您想將JSON字符串轉換為Ruby Hash,則可以執行

my_hash = JSON.parse('{"foo":"bar"}')
puts my_hash['foo']

有一個很棒的寶石可以做到這一點。 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存儲庫中的文檔以獲取更多詳細信息。

如果您想要使用訪問器方法的“方法化”哈希(一點都不壞!)

 require "ostruct"

 object_like_hash = OpenStruct.new(some_hash_with_string_or_symbol_keys)
 object_like_hash.foo #=> same as some_hash["foo"]

不存在的鍵將返回nil並且不會不幸地提高。

我覺得你有點困惑。 在問題中,您詢問如何將JSON 文檔轉換為類。 在注釋中,您說您想要RXSD XML工具的JSON版本,但是它將XML 模式轉換為Ruby類。

將JSON文檔轉換為類實際上沒有任何意義。 如果將文檔標記的世界與編程進行比較,文檔對應於對象,模式對應於類(實際上,類型,但是由於我們在談論Ruby,所以我們不要打開那種蠕蟲並堅持使用類)。

因此,從JSON文檔生成Ruby對象是有意義的,而從JSON模式生成Ruby類是有意義的,但從JSON文檔生成Ruby類卻沒有意義。 當然,壞消息是,為了能夠從JSON模式自動生成Ruby類,要使該類正常工作,JSON模式必須采用可自動處理(IOW機器可讀)格式。

不幸的是,沒有JSON模式這樣的東西,因此JSON模式通常不是機器可讀的,而只是Web服務提供商的API文檔頁面上的以人為本的英文文本的混合物。 如果你很幸運。 通常情況下,沒有文件在所有有關JSON模式。

因此,由於沒有描述JSON模式的標准化方法,因此就沒有用於處理JSON模式的標准化工具。 與XML不同,XML的標准化模式數量有限(DTD,XSD,RelaxNG)。

需要注意的是什么,我上面寫的是並不完全正確: 規范JSON模式(如JSONSchema ),並有那些的Ruby實現(如紅寶石/ JSONSchema ,驗證而已,不生成類),但沒有人使用它們,因此它們可能不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM