1. 程式人生 > 其它 >XML&JSON&YAML

XML&JSON&YAML

目錄

引言

XML也好,JOSN、YAML也好,本質上都是文字檔案,用於資料傳輸。它們與txt這種文字檔案的區別是,它們規範了資料格式,使得資料具有結構性,方便讀取和處理。XML、JSON、YAML的不同之處只是它們規定的資料格式不同,即語法不同。

XML

XML定義

XML是可擴充套件性標記語言。
發明XML的目的是傳輸和儲存資料,而非展示資料。
XML的標籤只能自定義。

XML主要用途有三個:

  • 資料傳輸
  • 用作配置檔案
  • 充當小型資料庫儲存資料

XML語法

XML基本語法

如下為一個基本的xml檔案,其基本規則有:

  • 標籤全部自定義,myroot, user, msg等標籤全部自定義
  • 標籤成對出現,格式為<tag></tag>,其中兩個尖括號之間是具體的內容資訊,成對標籤含義是這兩個標籤唯一的區別就是後邊那個有"/",其它完全一致,比如<tag></mytag>這樣是不對的。
  • 必須有根標籤(根節點),比如這裡的<myroot></myroot>,根標籤包括了所有內容,根標籤也是自定義的
  • 標籤名大小寫敏感
  • 標籤不允許交叉,比如<a><b></a></b>這樣是不對的,只能是一對標籤完全包含另一對標籤。
  • xml註釋用把要註釋的內容括起來
<?xml version="1.0" encoding="utf-8" ?>
<myroot> 
<user>中國</user>
<msg>睡獅漸已醒</msg>
`<!--<msg>睡獅漸已醒</msg11>-->`
</myroot>
  • 上邊第一行是頭宣告,聲明瞭xml的版本的檔案編碼,這一行可以省略。
  • 如果標籤中的資訊包含了<>等特殊字元,則需要使用實體轉義,如下表為需要轉義的字元:

XML屬性

屬性是標籤的屬性,比如下圖中name標籤的屬性age。

  • 一個標籤可以有多個屬性,屬性的值必須用引號括起來
  • 屬性表示標籤的一些額外資訊
  • xml中屬性沒啥用,而且會給解析帶來麻煩

CDATA

如果某個標籤中的內容有許多需要轉義的部分,那麼一個個用實體轉義會非常麻煩,這個時候可以用CDATA來括起來這部分,比如<,>等符號,使得其不被解析成xml的內容,而保持原樣。

格式是

<![CDATA[這裡放不解析的內容]]>

JSON

JSON定義

相比於XML,JSON是一種更輕量級的資料傳輸格式,易於機器解析和生成。

JSON資料格式

XML中有標籤,屬性等一系列格式,JSON的資料格式有兩種,即陣列和物件,且二者可以相互巢狀。

JSON陣列格式

JSON陣列格式用方括號[]包括,其中元素用逗號分開,陣列元素型別不做限制。

[1, 2, 3]

JSON物件格式

JSON物件格式用花括號{}括起來,其中的元素是鍵值對,本質與python中的字典一樣。
如下例子,是JSON陣列和物件的巢狀使用。

{"key":[1,2,3]}

JSON語法規則

JSON值可以是:

  • 數字
  • 字串(雙引號中)
  • 邏輯值(true或false)
  • 陣列(在中括號中)
  • 物件(在花括號中)
  • null

一般情況下json檔案中包含的都是一個物件(即鍵值對),但是隻包含一個數組也是允許的。這與XML必須有根節點不同。

YAML

JSON相比於XML更簡潔,YAML相比於JSON更簡潔。比較明顯的一點是,XML中標籤必須是成對的,而JSON中不需要。JSON中會使用很多的花括號和方括號,YAML則可以連這些都省去。

YAML語法規則

  • 大小寫敏感
  • 使用縮排表示層級關係
  • 縮排不允許使用tab,只允許空格
  • 空格數不重要,只要對齊即可
  • #表示註釋

YAML支援的資料型別:

  • 物件,即鍵值對集合,又稱為雜湊,對映,字典
  • 陣列
  • 純量

YAML物件中的鍵值對用冒號分隔,且冒號後有一個空格。如果一個物件裡只有一個鍵值對,那麼可以不用花括號。
YAML中陣列可以用-開頭的行表示,也可以按傳統方式,所有元素放在中括號中。

  • YAML可以用&和來做引用,&用來標識可以引用的地方,用來在具體的位置引用。

XML,JSON,YAML對同一內容的不同表達

注意YAML中“-”表示是一個數組,且陣列中包含4個元素。