YAML和JSON有什麼區別,特別考慮如下幾點? html
- 性能(編碼/解碼時間)
- 內存消耗
- 表情清晰
- 圖書館的可用性,易用性(我更喜歡C)
我打算在嵌入式系統中使用這兩個之一來存儲配置文件。 程序員
有關:
我應該使用YAML仍是JSON存儲個人Perl數據? 數據庫
#1樓
差別: 編程
- 根據您的使用方式,YAML比JSON更具可讀性
- JSON一般更快 ,而且可能仍可與更多系統互操做
- 能夠很是快速地編寫一個「足夠好」的JSON解析器
- 重複鍵,這是潛在的有效的JSON, 確定是無效的YAML。
- YAML具備大量功能,包括註釋和關係錨。 所以,YAML語法很是複雜,而且可能難以理解。
- 能夠在yaml中編寫遞歸結構:
{a: &b [*b]}
,它將在某些轉換器中無限循環。 即便進行循環檢測,「 yaml炸彈」仍然是可能的(請參閱xml bomb )。
- 由於沒有引用,因此沒法使用JSON中的對象引用序列化複雜的結構。 所以,YAML序列化能夠更有效。
- 在某些編碼環境中,使用YAML可使攻擊者執行任意代碼 。
觀察結果: 網絡
- Python程序員一般是YAML的忠實擁護者,由於使用縮進(而不是方括號)來指示級別。
- 許多程序員認爲將「含義」附加到縮進上是一個糟糕的選擇。
- 若是數據格式將離開應用程序的環境,在UI中進行解析或在消息傳遞層中發送,則JSON多是更好的選擇。
- YAML能夠直接用於諸如語法定義之類的複雜任務,而且比發明新語言一般是更好的選擇。
#2樓
我發現YAML看起來更容易:圓括號,「」等更少。儘管YAML中的製表符很煩人,但其中的一環卻無處可去。 編輯器
在性能/資源方面,我不但願二者之間有很大的差別。 性能
此外,咱們正在談論配置文件,所以我不但願出現頻繁的編碼/解碼活動,不是嗎? google
#3樓
若是您不須要YAML所具備的任何功能而JSON卻沒有,那麼我將更喜歡JSON,由於它很是簡單而且受到普遍支持(具備許多語言的庫)。 YAML更復雜且支持較少。 我認爲解析速度或內存使用不會有太大差別,而且可能不會對程序性能產生很大影響。 編碼
#4樓
從技術上講,YAML是JSON的超集。 這意味着,至少從理論上講,YAML解析器能夠理解JSON,但不必定能夠理解。 spa
請參閱標題爲「 YAML:與JSON的關係」的部分中的官方規範。
一般,我喜歡某些關於YAML的東西,這些東西在JSON中不可用。
- 正如@jdupont所指出的 ,YAML在視覺上更易於查看。 實際上, YAML主頁自己就是有效的YAML,可是對於人類而言,它很容易閱讀。
- YAML可以使用「錨」引用YAML文件中的其餘項目。 所以,它能夠處理在MySQL數據庫中可能發現的關係信息。
- YAML是約YAML文件中嵌入其餘的序列化格式諸如JSON或XML更穩健。
在實踐中,最後兩點都不會對您或我所作的事情有影響,但從長遠來看,我認爲YAML將是更健壯和可行的數據序列化格式。
目前,AJAX和其餘Web技術傾向於使用JSON。 目前,YAML被更多地用於脫機數據處理。 例如,默認狀況下,它包含在基於C的OpenCV計算機視覺程序包中,而JSON沒有。
您會發現JSON和YAML的C庫。 YAML的庫每每是較新的,但過去我對它們沒有遇到任何麻煩。 參見例如Yaml-cpp 。
#5樓
繞開深奧的理論
這回答了標題,而不是細節,由於大多數人只是從像我這樣的Google搜索結果中讀取標題,因此我以爲有必要從網絡開發人員的角度進行解釋。
- YAML使用空格縮進,這是Python開發人員熟悉的領域。
- JavaScript開發人員喜歡JSON,由於它是JavaScript的子集,而且能夠在JavaScript內部直接解釋和編寫,還可使用簡寫方式聲明JSON,在使用不帶空格的典型變量名時,鍵中不須要雙引號。
- 對於YAML和JSON,有不少解析器在全部語言中均可以很好地工做。
- 在許多狀況下,YAML的空白格式可能更容易查看,由於格式須要更易於理解的方法。
- 若是您在編輯器中沒有可見的空格或縮進線指示符,則YAML的空格雖然更緊湊且更易於查看,但看起來很難手動編輯。
- 與要檢查的YAML相比,JSON的功能要少得多,所以JSON的序列化和反序列化速度要快得多,這使得更小更輕的代碼能夠處理JSON。
- 一個常見的誤解是,YAML比JSON須要更少的標點而且更緊湊,但這徹底是錯誤的。 空格是不可見的,所以彷佛字符較少,可是若是您計算實際的空格,以便正確解釋YAML和正確的縮進,必須存在該空格,您會發現YAML實際上比JSON須要更多的字符。 JSON不使用空格來表示層次結構或分組,而且能夠很容易地進行平整,並刪除了沒必要要的空格以進行更緊湊的傳輸。
房間裏的大象:互聯網自己
JavaScript如此明顯地在網絡上佔據了主導地位,而且JavaScript開發人員更傾向於將JSON做爲數據格式與流行的Web API一塊兒使用,所以在通常意義上進行Web編程時,很難爭辯使用YAML而不是JSON,由於您可能會過度同意在團隊環境中。 實際上,大多數Web程序員甚至都不知道YAML的存在,更不用說考慮使用它了。
若是您正在執行任何Web編程,則JSON是默認的處理方式,由於使用JavaScript時不須要任何翻譯步驟,所以在這種狀況下,您必須提出一個更好的參數以在JSON上使用YAML。