YAML和JSON有什麼區別?

YAML和JSON有什麼區別,特別考慮如下幾點? html

  • 性能(編碼/解碼時間)
  • 內存消耗
  • 表情清晰
  • 圖書館的可用性,易用性(我更喜歡C)

我打算在嵌入式系統中使用這兩個之一來存儲配置文件。 程序員

有關:

我應該使用YAML仍是JSON存儲個人Perl數據? 數據庫


#1樓

差別: 編程

  1. 根據您的使用方式,YAML比JSON更具可讀性
  2. JSON一般更快 ,而且可能仍可與更多系統互操做
  3. 能夠很是快速地編寫一個「足夠好」的JSON解析器
  4. 重複鍵,這是潛在的有效的JSON, 確定是無效的YAML。
  5. YAML具備大量功能,包括註釋和關係錨。 所以,YAML語法很是複雜,而且可能難以理解。
  6. 能夠在yaml中編寫遞歸結構: {a: &b [*b]} ,它將在某些轉換器中無限循環。 即便進行循環檢測,「 yaml炸彈」仍然是可能的(請參閱xml bomb )。
  7. 由於沒有引用,因此沒法使用JSON中的對象引用序列化複雜的結構。 所以,YAML序列化能夠更有效。
  8. 在某些編碼環境中,使用YAML可使攻擊者執行任意代碼

觀察結果: 網絡

  1. Python程序員一般是YAML的忠實擁護者,由於使用縮進(而不是方括號)來指示級別。
  2. 許多程序員認爲將「含義」附加到縮進上是一個糟糕的選擇。
  3. 若是數據格式將離開應用程序的環境,在UI中進行解析或在消息傳遞層中發送,則JSON多是更好的選擇。
  4. 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搜索結果中讀取標題,因此我以爲有必要從網絡開發人員的角度進行解釋。

  1. YAML使用空格縮進,這是Python開發人員熟悉的領域。
  2. JavaScript開發人員喜歡JSON,由於它是JavaScript的子集,而且能夠在JavaScript內部直接解釋和編寫,還可使用簡寫方式聲明JSON,在使用不帶空格的典型變量名時,鍵中不須要雙引號。
  3. 對於YAML和JSON,有不少解析器在全部語言中均可以很好地工做。
  4. 在許多狀況下,YAML的空白格式可能更容易查看,由於格式須要更易於理解的方法。
  5. 若是您在編輯器中沒有可見的空格或縮進線指示符,則YAML的空格雖然更緊湊且更易於查看,但看起來很難手動編輯。
  6. 與要檢查的YAML相比,JSON的功能要少得多,所以JSON的序列化和反序列化速度要快得多,這使得更小更輕的代碼能夠處理JSON。
  7. 一個常見的誤解是,YAML比JSON須要更少的標點而且更緊湊,但這徹底是錯誤的。 空格是不可見的,所以彷佛字符較少,可是若是您計算實際的空格,以便正確解釋YAML和正確的縮進,必須存在該空格,您會發現YAML實際上比JSON須要更多的字符。 JSON不使用空格來表示層次結構或分組,而且能夠很容易地進行平整,並刪除了沒必要要的空格以進行更緊湊的傳輸。

房間裏的大象:互聯網自己

JavaScript如此明顯地在網絡上佔據了主導地位,而且JavaScript開發人員更傾向於將JSON做爲數據格式與流行的Web API一塊兒使用,所以在通常意義上進行Web編程時,很難爭辯使用YAML而不是JSON,由於您可能會過度同意在團隊環境中。 實際上,大多數Web程序員甚至都不知道YAML的存在,更不用說考慮使用它了。

若是您正在執行任何Web編程,則JSON是默認的處理方式,由於使用JavaScript時不須要任何翻譯步驟,所以在這種狀況下,您必須提出一個更好的參數以在JSON上使用YAML。

相關文章
相關標籤/搜索