偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JSON、XML、TOML、CSON、YAML大比拼

開(kāi)發(fā) 前端
由于我是一名 web 開(kāi)發(fā)者,而且我們是一個(gè)創(chuàng)建網(wǎng)站的機(jī)構(gòu),我們將堅(jiān)持使用 web 系統(tǒng)可以理解或不需要太多努力就能理解的特殊格式,而且對(duì)人類可讀性特別有用的格式:XML、JSON、TOML、CSON 以及 YAML。每個(gè)都有各自的優(yōu)缺點(diǎn)和適當(dāng)?shù)挠美龍?chǎng)景。

[[260876]]

一段超級(jí)嚴(yán)肅的關(guān)于樣本序列化的集合、子集和超集的文字

我是一名開(kāi)發(fā)者,我讀代碼,我寫代碼,我寫會(huì)寫代碼的代碼,我寫會(huì)寫出供其它代碼讀的代碼的代碼。這些都非常火星語(yǔ),但是有其美妙之處。然而,***一點(diǎn),寫會(huì)寫出供其它代碼讀的代碼的代碼,可以很快變得比這段文字更費(fèi)解。有很多方法可以做到這一點(diǎn)。一種不那么復(fù)雜而且開(kāi)發(fā)者社區(qū)***的方式是數(shù)據(jù)序列化。對(duì)于那些不了解我剛剛拋給你的時(shí)髦詞的人,數(shù)據(jù)序列化是從一個(gè)系統(tǒng)獲取一些信息,將其轉(zhuǎn)換為其它系統(tǒng)可以讀取的格式,然后將其傳遞給其它系統(tǒng)的過(guò)程。

雖然數(shù)據(jù)序列化格式多到可以埋葬哈利法塔,但它們大多分為兩類:

  • 易于人類讀寫,
  • 易于機(jī)器讀寫。

很難兩全其美,因?yàn)槿祟愊矚g讓我們更具表現(xiàn)力的松散類型和靈活格式標(biāo)準(zhǔn),而機(jī)器傾向于被確切告知一切事情而沒(méi)有二義性和細(xì)節(jié)缺失,并且認(rèn)為“嚴(yán)格規(guī)范”才是它們***的口味。

由于我是一名 web 開(kāi)發(fā)者,而且我們是一個(gè)創(chuàng)建網(wǎng)站的機(jī)構(gòu),我們將堅(jiān)持使用 web 系統(tǒng)可以理解或不需要太多努力就能理解的特殊格式,而且對(duì)人類可讀性特別有用的格式:XML、JSON、TOML、CSON 以及 YAML。每個(gè)都有各自的優(yōu)缺點(diǎn)和適當(dāng)?shù)挠美龍?chǎng)景。

事實(shí)***

回到互聯(lián)網(wǎng)的早期,一些非常聰明的家伙決定整合一種讓每個(gè)系統(tǒng)都能理解的標(biāo)準(zhǔn)語(yǔ)言,并創(chuàng)造性地將其命名為標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言Standard Generalized Markup Language(簡(jiǎn)稱 SGML)。SGML 非常靈活,發(fā)布者也很好地定義了它。它成為了 XML、SVG 和 HTML 等語(yǔ)言之父。所有這三個(gè)都符合 SGML 規(guī)范,可是它們都是規(guī)則更嚴(yán)格、靈活性更少的子集。

最終,人們開(kāi)始看到非常小、簡(jiǎn)潔、易讀且易于生成的數(shù)據(jù)的好處,這些數(shù)據(jù)可以在系統(tǒng)之間以編程的方式共享,而開(kāi)銷很小。大約在那個(gè)時(shí)候,JSON 誕生了并且能夠滿足所有的需求。而另一方面,其它語(yǔ)言也開(kāi)始出現(xiàn)以處理更多的專業(yè)用例,如 CSON,TOML 和 YAML。

XML:不行了

原本,XML 語(yǔ)言非常靈活且易于編寫,但它的缺點(diǎn)是冗長(zhǎng),人類難以閱讀、計(jì)算機(jī)非常難以讀取,并且有很多語(yǔ)法對(duì)于傳達(dá)信息并不是完全必要的。

今天,它在 web 上的數(shù)據(jù)序列化的用途已經(jīng)消失了。除非你在編寫 HTML 或者 SVG,否則你不太能在許多其它地方看到 XML。一些過(guò)時(shí)的系統(tǒng)今天仍在使用它,但是用它傳遞數(shù)據(jù)往往太重了。

我已經(jīng)可以聽(tīng)到 XML 老爺爺開(kāi)始在它們的石碑上亂寫為什么 XML 是了不起的,所以我將提供一個(gè)小小的補(bǔ)充:XML 可以很容易地由系統(tǒng)和人讀寫。然而,真的,我的意思是荒謬的,很難創(chuàng)建一個(gè)可以規(guī)范的讀取它的系統(tǒng)。這是一個(gè)簡(jiǎn)單美觀的 XML 示例:

  1. <book id="bk101">
  2. <author>Gambardella, Matthew</author>
  3. <title>XML Developer's Guide</title>
  4. <genre>Computer</genre>
  5. <price>44.95</price>
  6. <publish_date>2000-10-01</publish_date>
  7. <description>An in-depth look at creating applications
  8. with XML.</description>
  9. </book>

太棒了。易于閱讀、理解、寫入,也容易編碼一個(gè)可以讀寫它的系統(tǒng)。但請(qǐng)考慮這個(gè)例子:

  1. <!DOCTYPE r [ <!ENTITY y "a]>b"> ]>
  2. <r>
  3. <a b="&y;>" />
  4. <![CDATA[[a>b <a>b <a]]>
  5. <?x <a> <!-- <b> ?> c --> d
  6. </r>

這上面是 100% 有效的 XML。幾乎不可能閱讀、理解或推理。編寫可以使用和理解這個(gè)的代碼將花費(fèi)至少 36 根頭發(fā)和 248 磅咖啡渣。我們沒(méi)有那么多時(shí)間或咖啡,而且我們大多數(shù)老程序員們現(xiàn)在都是禿頭。所以,讓它活在我們的記憶里,就像 css hacksIE 6 瀏覽器真空管一樣好了。

JSON:并列聚會(huì)

好吧,我們都同意,XML = 差勁。那么,好的替代品是什么?JavaScript 對(duì)象表示法JavaScript Object Notation,簡(jiǎn)稱 JSON。JSON(讀起來(lái)像 Jason 這個(gè)名字) 是 Brendan Eich 發(fā)明的,并且得到了偉大而強(qiáng)力的 JavaScript 意見(jiàn)*** Douglas Crockford 的推廣。它現(xiàn)在幾乎用在任何地方。這種格式很容易由人和機(jī)器編寫,按規(guī)范中的嚴(yán)格規(guī)則解析也相當(dāng)容易,并且靈活 —— 允許深層嵌套數(shù)據(jù),支持所有的原始數(shù)據(jù)類型,及將集合解釋為數(shù)組或?qū)ο?。JSON 成為了將數(shù)據(jù)從一個(gè)系統(tǒng)傳輸?shù)搅硪粋€(gè)系統(tǒng)的事實(shí)標(biāo)準(zhǔn)。幾乎所有語(yǔ)言都有內(nèi)置讀寫它的功能。

JSON語(yǔ)法很簡(jiǎn)單。方括號(hào)表示數(shù)組,花括號(hào)表示記錄,由冒號(hào)分隔的兩個(gè)值分別表示屬性或“鍵”(在左邊)、值(在右邊)。所有鍵必須用雙引號(hào)括起來(lái):

  1. {
  2. "books": [
  3. {
  4. "id": "bk102",
  5. "author": "Crockford, Douglas",
  6. "title": "JavaScript: The Good Parts",
  7. "genre": "Computer",
  8. "price": 29.99,
  9. "publish_date": "2008-05-01",
  10. "description": "Unearthing the Excellence in JavaScript"
  11. }
  12. ]
  13. }

這對(duì)你來(lái)說(shuō)應(yīng)該是完全有意義的。它簡(jiǎn)潔明了,并且從 XML 中刪除了大量額外廢話,并傳達(dá)相同數(shù)量的信息。JSON 現(xiàn)在是王道,本文剩下的部分會(huì)介紹其它語(yǔ)言格式,這些格式只不過(guò)是 JSON 的簡(jiǎn)化版,嘗試讓其更簡(jiǎn)潔或?qū)θ祟惛鬃x,可結(jié)構(gòu)還是非常相似的。

TOML: 縮短到徹底的利他主義

TOML(Tom 的顯而易見(jiàn)的最小化語(yǔ)言Tom’s Obvious, Minimal Language)允許以相當(dāng)快捷、簡(jiǎn)潔的方式定義深層嵌套的數(shù)據(jù)結(jié)構(gòu)。名字中的 Tom 是指*** Tom Preston Werner,他是一位活躍于我們行業(yè)的創(chuàng)造者和軟件開(kāi)發(fā)人員。與 JSON 相比,語(yǔ)法有點(diǎn)尷尬,更類似 ini 文件。這不是一個(gè)糟糕的語(yǔ)法,但是需要一些時(shí)間適應(yīng)。

  1. [[books]]
  2. id = 'bk101'
  3. author = 'Crockford, Douglas'
  4. title = 'JavaScript: The Good Parts'
  5. genre = 'Computer'
  6. price = 29.99
  7. publish_date = 2008-05-01T00:00:00+00:00
  8. description = 'Unearthing the Excellence in JavaScript'

TOML 中集成了一些很棒的功能,例如多行字符串、保留字符的自動(dòng)轉(zhuǎn)義、日期、時(shí)間、整數(shù)、浮點(diǎn)數(shù)、科學(xué)記數(shù)法和“表擴(kuò)展”等數(shù)據(jù)類型。***一點(diǎn)是特別的,是 TOML 如此簡(jiǎn)潔的原因:

  1. [a.b.c]
  2. d = 'Hello'
  3. e = 'World'

以上擴(kuò)展到以下內(nèi)容:

  1. {
  2. "a": {
  3. "b": {
  4. "c": {
  5. "d": "Hello"
  6. "e": "World"
  7. }
  8. }
  9. }
  10. }

使用 TOML,你可以肯定在時(shí)間和文件長(zhǎng)度上會(huì)節(jié)省不少。很少有系統(tǒng)使用它或非常類似的東西作為配置,這是它***的缺點(diǎn)。根本沒(méi)有很多語(yǔ)言或庫(kù)可以用來(lái)解釋 TOML。

CSON: 特定系統(tǒng)所包含的簡(jiǎn)單樣本

首先,有兩個(gè) CSON 規(guī)范。 一個(gè)代表 CoffeeScript Object Notation,另一個(gè)代表 Cursive Script Object Notation。后者不經(jīng)常使用,所以我們不會(huì)關(guān)注它。我們只關(guān)注 CoffeeScript。

CSON 需要一點(diǎn)介紹。首先,我們來(lái)談?wù)?CoffeeScript。CoffeeScript 是一種通過(guò)運(yùn)行編譯器生成 JavaScript 的語(yǔ)言。它允許你以更加簡(jiǎn)潔的語(yǔ)法編寫 JavaScript 并轉(zhuǎn)譯成實(shí)際的 JavaScript,然后你可以在你的 web 應(yīng)用程序中使用它。CoffeeScript 通過(guò)刪除 JavaScript 中必需的許多額外語(yǔ)法,使編寫 JavaScript 變得更容易。CoffeeScript 擺脫的一個(gè)大問(wèn)題是花括號(hào) —— 不需要它們。同樣,CSON 是沒(méi)有大括號(hào)的 JSON。它依賴于縮進(jìn)來(lái)確定數(shù)據(jù)的層次結(jié)構(gòu)。CSON 非常易于讀寫,并且通常比 JSON 需要更少的代碼行,因?yàn)闆](méi)有括號(hào)。

CSON 還提供一些 JSON 不提供的額外細(xì)節(jié)。多行字符串非常容易編寫,你可以通過(guò)使用 # 符號(hào)開(kāi)始一行來(lái)輸入注釋,并且不需要用逗號(hào)分隔鍵值對(duì)。

  1. books: [
  2. id: 'bk102'
  3. author: 'Crockford, Douglas'
  4. title: 'JavaScript: The Good Parts'
  5. genre: 'Computer'
  6. price: 29.99
  7. publish_date: '2008-05-01'
  8. description: 'Unearthing the Excellence in JavaScript'
  9. ]

這是 CSON 的大問(wèn)題。它是 CoffeScript 對(duì)象表示法CoffeeScript Object Notation。也就是說(shuō)你要用 CoffeeScript 解析/標(biāo)記化/lex/轉(zhuǎn)譯或其它方式來(lái)使用 CSON。CoffeeScript 是讀取數(shù)據(jù)的系統(tǒng)。如果數(shù)據(jù)序列化的目的是允許數(shù)據(jù)從一個(gè)系統(tǒng)傳遞到另一個(gè)系統(tǒng),這里我們有一個(gè)只能由單個(gè)系統(tǒng)讀取的數(shù)據(jù)序列化格式,這使得它與防火火柴、防水海綿或者叉匙惱人的脆弱叉子部分一樣有用。

如果這種格式被其它系統(tǒng)也采用,那它在開(kāi)發(fā)者世界中可能非常有用。但到目前為止這基本上沒(méi)有發(fā)生,所以在 PHP 或 JAVA 等替代語(yǔ)言中使用它是不行的。

YAML:年輕人的呼喊

開(kāi)發(fā)人員感到高興,因?yàn)?YAML 來(lái)自一個(gè) Python 的貢獻(xiàn)者。YAML 具有與 CSON 相同的功能集和類似的語(yǔ)法,有一系列新功能,以及幾乎所有 web 編程語(yǔ)言都可用的解析器。它還有一些額外的功能,如循環(huán)引用、軟包裝、多行鍵、類型轉(zhuǎn)換標(biāo)簽、二進(jìn)制數(shù)據(jù)、對(duì)象合并和集合映射。它具有非常好的可讀性和可寫性,并且是 JSON 的超集,因此你可以在 YAML 中使用完全合格的 JSON 語(yǔ)法并且一切正常工作。你幾乎不需要引號(hào),它可以解釋大多數(shù)基本數(shù)據(jù)類型(字符串、整數(shù)、浮點(diǎn)數(shù)、布爾值等)。

  1. books:
  2. - id: bk102
  3. author: Crockford, Douglas
  4. title: 'JavaScript: The Good Parts'
  5. genre: Computer
  6. price: 29.99
  7. publish_date: !!str 2008-05-01
  8. description: Unearthing the Excellence in JavaScript

業(yè)界的年輕人正在迅速采用 YAML 作為他們***的數(shù)據(jù)序列化和系統(tǒng)配置格式。他們這樣做很機(jī)智。YAML 具有像 CSON 一樣簡(jiǎn)潔的所有好處,以及與 JSON 一樣的數(shù)據(jù)類型解釋的所有功能。YAML 像加拿大人容易相處一樣容易閱讀。

YAML 有兩個(gè)問(wèn)題,對(duì)我而言,***個(gè)是大問(wèn)題。在撰寫本文時(shí),YAML 解析器尚未內(nèi)置于多種語(yǔ)言,因此你需要使用第三方庫(kù)或擴(kuò)展來(lái)為你選擇的語(yǔ)言解析 .yaml 文件。這不是什么大問(wèn)題,可似乎大多數(shù)為 YAML 創(chuàng)建解析器的開(kāi)發(fā)人員都選擇隨機(jī)將“附加功能”放入解析器中。有些允許標(biāo)記化,有些允許鏈引用,有些甚至允許內(nèi)聯(lián)計(jì)算。這一切都很好(某種意義上),只是這些功能都不是規(guī)范的一部分,因此很難在其他語(yǔ)言的其他解析器中找到。這導(dǎo)致系統(tǒng)限定,你最終遇到了與 CSON 相同的問(wèn)題。如果你使用僅在一個(gè)解析器中找到的功能,則其他解析器將無(wú)法解釋輸入。大多數(shù)這些功能都是無(wú)意義的,不屬于數(shù)據(jù)集,而是屬于你的應(yīng)用程序邏輯,因此***簡(jiǎn)單地忽略它們和編寫符合規(guī)范的 YAML。

第二個(gè)問(wèn)題是很少有解析器完全實(shí)現(xiàn)規(guī)范。所有的基本要素都有,但是很難找到一些更復(fù)雜和更新的東西,比如軟包裝、文檔標(biāo)記和***語(yǔ)言的循環(huán)引用。我還沒(méi)有看到對(duì)這些東西的剛需,所以希望它們不讓你很失望??紤]到上述情況,我傾向于保持 1.1 規(guī)范 中呈現(xiàn)的更成熟的功能集,而避免在 1.2 規(guī)范 中找到的新東西。然而,編程是一個(gè)不斷發(fā)展的怪獸,所以當(dāng)你讀完這篇文章時(shí),你或許就可以使用 1.2 規(guī)范了。

最終哲學(xué)

這是***一段話。每個(gè)序列化語(yǔ)言都應(yīng)該以個(gè)案標(biāo)準(zhǔn)的方式評(píng)價(jià)。當(dāng)涉及機(jī)器的可讀性時(shí),有些無(wú)出其右the bee’s knees。對(duì)于人類可讀性,有些名至實(shí)歸the cat’s meow,有些只是金玉其外gilded turds。以下是最終細(xì)分:如果你要編寫供其他代碼閱讀的代碼,請(qǐng)使用 YAML。如果你正在編寫能寫出供其他代碼讀取的代碼的代碼,請(qǐng)使用 JSON。***,如果你正在編寫將代碼轉(zhuǎn)譯為供其他代碼讀取的代碼的代碼,請(qǐng)重新考慮你的人生選擇。 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2011-01-19 11:10:30

2010-03-18 14:54:46

主流無(wú)線技術(shù)

2010-07-14 13:38:51

Perl開(kāi)發(fā)工具

2020-08-04 17:06:40

Merging Rebasing Git

2010-09-08 15:41:28

SIP協(xié)議棧

2010-05-28 11:09:51

SVN功能

2014-01-07 17:08:02

Java開(kāi)源框架

2010-08-25 16:12:34

職場(chǎng)

2017-09-10 14:29:03

眼力

2023-05-26 15:53:48

MidjourneyAI圖像

2011-11-08 10:29:44

2021-03-15 21:07:17

IT行業(yè)薪酬薪水

2018-10-25 14:08:07

KubernetesGoogle

2011-04-01 09:18:01

MRTGCactiZabbix

2010-04-21 12:54:46

Unix內(nèi)核

2012-08-15 09:26:54

虛擬化

2019-08-27 09:00:00

敏捷開(kāi)發(fā)開(kāi)發(fā)方法項(xiàng)目

2013-04-22 14:21:13

WP、Android、

2009-12-01 08:47:41

2009-10-13 14:46:00

思科認(rèn)證
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)