所有動態語言(如Ruby Groovy Python)及其相關框架(如Ruby on rails)都在競爭。雖然閱讀本文的大多數Java開發人員每天都在與純Java打交道,並且在未來許多年內都會這樣做,但這並不意味著他們不能學習新知識並為自己的武器庫添加新武器。這篇文章介紹了YAML(YAML沒有。文件格式(由Ruby on rails框架解釋,因為其所有配置文件都是YAML文件)及其與XML和JSON的區別。最後,討論了YAML的優缺點。
空格縮進和JSON選項
YAML文件格式主要關註空格縮進的概念,它用於指示數據的層次結構,而不是使用JSON的XML嵌套標簽或大括號({})和方括號(【】)。事實上,它是JSON的超集,因此您可能需要使用JSON風格的語法來跳出空間流。其創始人將其描述為為所有編程語言提供了人性化的數據序列化標準。以我的經驗來看,重點是人性化。這是壹個使用空格縮進的YAML示例。創建YAML文件時不適合使用固定寬度的字體,因為空格非常重要(請參考側欄YAML和標簽)
JFrame:default CLOSE operation:JFrame EXIT _ ON _ CLOSE標題:測試幀寬度:高度:組件:JTextArea:名稱:TextArea文本:|這是壹個跨多行的很長的文本(但保留了新行)它不需要用特殊括號CDATA標記或類似的東西進行轉義
側欄YAML和標簽?在任何基於空格縮進的文件格式中,最常見的問題之壹是如何解釋標簽。在這個YAML的例子中,答案很簡單。它不支持標簽使用標簽字符縮進而不是空格,這將導致異常處理。
您可以在任何節點隨意使用JSON風格的語法或混合語法。例如,上面的示例可以改為。
JFrame:default CLOSE operation:JFrame EXIT _ ON _ CLOSE標題:測試幀寬度:高度:組件:JTextArea:名稱:TextArea文本:|這是壹個跨多行的很長的文本(但保留了新行)它不需要使用特殊的括號CDATA標記或類似的內容進行轉義JButton:{ name:button text:button } # JSON樣式語法。
在底部節點切換到JSON風格的語法特別有用(也就是說,它們沒有子節點,正如您所猜測的那樣,在YAML的註釋中使用了磅符號)。
YAML結構部件
我們以前見過壹個簡單的YAML例子。讓我們看看YAML、哈希表和塊字面量的結構。
哈希(哈希)
散列的創建是通過縮進子段並在關鍵字和值之間使用冒號(:)來實現的,例如
JFrame:default CLOSE operation:JFrame EXIT _ ON _ CLOSE標題:測試幀寬度:高度:
另壹種方法是使用JSON兼容的大括號語法({})語法。每對關鍵字/值由逗號()分隔,例如
JFrame:{ defaultCloseOperation:JFrame EXIT _ ON _ CLOSE標題:測試幀
寬度:高度:}
列表(列表)
通過在每個列表元素前面加上減號()和空格縮進來創建列表,構成了YAML的基礎。
組件:JTextArea Jbutton
另壹種方法是使用JSON兼容的方括號(【】)語法,例如
組件:【JTextArea JButton】
塊文字(文本塊)
這是YAML的亮點,尤其是與XML相比,它的CDATA相當粗糙。塊文本可以小心地將大塊文本插入文件中。您可以使用豎線(|)命令在文本中保留新行,例如
文本:|這是壹個跨多行的很長的文本(但保留新行),它不需要用特殊的括號CDATA標簽或類似的東西進行轉義
YAML編譯器將從第壹行的第壹個文本字符開始編譯(並丟失所有縮進的空格),但會在文本中保留新的壹行。
此外,您還可以使用大於號(》告訴YAML編譯器將所有新行分隔開,並將輸入文本視為壹個長行。
文本:& gt這是壹個很長的文本,跨越多行(但保留新行),不需要用特殊的括號CDATA標簽或類似的東西進行轉義
除了這兩條指令之外,您還可以使用豎線和加號(|+),它將分隔前面的空格,保留新行和末尾的空格,您還可以使用大於號和減號(》)分隔所有空格。
YAML VS XML和JSON
從前面的例子中可以清楚地看到,YAML不像XML那樣冗長。YAML文件的大部分內容都是真實數據,沒有無窮無盡的開始和結束標簽。在XML中,這些標簽通常比它們描述的數據大。YAML更適合需要手動維護的數據文件類型。
YAML沒有提供方案或DTD概念,因此它無法驗證文件格式是否符合您的期望。XML的冗長也有其價值,但壹般來說,由於XML的成熟,它有很多額外的工具來驗證其格式,但YAML沒有。
JSON也適用於任何數據。它的主要目的是提高性能和文件大小,因為它幾乎不使用空格和結束標記。然而,JSON文件的內容增加了復雜性,它的結束標誌就像下地獄壹樣。這是JavaFx代碼(基於JSON)中最令人痛苦的事情。在數據文件中使用UI結構會使結果更加復雜,其復雜性幾乎使文件無法理解。
查看JavaFx示例代碼(單擊編輯此頁面鏈接)。請特別註意它的結尾。
} } } }】} } center:book panel }
混合使用{}結構和【】列表使得手動維護大型JSON風格的文件變得非常困難。YAML巧妙地解決了這個問題,利用其空間縮進方法。當然,您可以隨時切換到JSON風格的語法(例如在底部節點)。
解析YAML文件最常用的Java庫是在其Ruby on Rails框架中導入和導出jvy AML()JRuby(在Java VM上運行Ruby版本的動態語言)。使用JvYAML JvYAML提供了壹般文件處理的功能(在前面的示例中,它返回了標準Java字符串長映射和列表對象的嵌套架構)。例如使用靜態dump()方法保存為文件,然後使用靜態load()方法加載。
YAML轉儲(對象數據寫入器輸出);對象數據= YAML負載(讀取器io);
參考側欄中基於YAML的開源項目,了解基於YAML的開源項目以及如何在Java中加載解釋性UI。
基於YAML的側欄開源項目?請原諒我在這裏無恥地介紹我們自己的開源項目。當我真的不知道其他基於YAML的開源項目時,除了JRuby,JRuby的Ruby on Rails框架的實現嚴重依賴YAML而不是XML或JSON。看看我的Java構建器庫()。它提供了壹種通過使用YAML文件將描述UI加載到Java中來定義屏幕控制布局事件行和數據綁定的方法。
事實上,YAML文件非常簡單,甚至妳可以使用任何文本編輯器來維護它,但是壹些特殊的文本編輯器提供了語法高亮功能,這對於維護非常有幫助。對於Eclipse,有Eclipse YAML編輯器(),對於NetBeans,您可以使用Ruby包中的YAML編輯器(),但是在NetBea中,ns中的YAML編輯器沒有用。它只支持YAML的壹小部分(例如,它不支持塊文字)。我希望NetBeans中的YAML編輯器已經解決了這個問題。
我還沒有機會測試IntelliJ IDEA,但我猜它的Ruby on Rails插件(+IDEA+Ruby+Plugin)附帶了壹個YAML編輯器。
添加YAML工具
lishixinzhi/Article/program/Java/JSP/201311/19416