XML和JSON數據格式

目錄html

XMLpython

DTD(文檔類型定義)web

DTD實體json

JSON後端

使用python解析JSON數據數組

XML和JSON的區別 瀏覽器

XML的優缺點服務器

JSON的優缺點函數


XML和JSON都是web存儲和傳輸過程當中數據的格式,其中JSON 使用比較普遍,主要用來先後端交互數據。spa

XML

XML(Extensible Markup Language)擴展標記語言 ,是一種經常使用的標記語言,用於標記電子文件使其具備結構性,能夠用來標記數據、定義數據類型,是一種容許用戶對本身的標記語言進行定義的源語言。XML和SGML都是SGML(Standard Generalized Markup Language)。 XML使用 DTD(document type definition)文檔類型定義來組織數據;格式統一,跨平臺和語言,早已成爲業界公認的標準。
XML是標準通用標記語言 (SGML) 的子集,很是適合 Web 傳輸。XML 提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。

#XML聲明
<?xml version="1.0" encoding="UTF-8"?> 

#文檔類型定義DTD
<!DOCTYPE note [
    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to       (#PCDATA)>
    <!ELEMENT from     (#PCDATA)>
    <!ELEMENT heading  (#PCDATA)>
    <!ELEMENT body     (#PCDATA)>
]>

#文檔元素
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Hello,word!</body>
</note>

XML文檔的構建模塊 

全部的 XML 文檔(以及 HTML 文檔)均由如下簡單的構建模塊構成:

  • 元素
  • 屬性
  • 實體
  • PCDATA
  • CDATA

下面是每一個構建模塊的簡要描述。
1:元素
元素是 XML 以及 HTML 文檔的主要構建模塊,元素可包含文本、其餘元素或者是空的。
實例:

<body>body text in between</body>

空的 HTML 元素的例子是 <hr>、<br> 以及 <img>。

2:屬性
屬性可提供有關元素的額外信息
實例:

<img src="computer.gif" />

3:實體
實體是用來定義普通文本的變量。實體引用是對實體的引用。

4:PCDATA
PCDATA 的意思是被解析的字符數據(parsed character data)。
PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。

5:CDATA
CDATA 的意思是字符數據(character data)。
CDATA 是不會被解析器解析的文本。

DTD(文檔類型定義)

DTD(文檔類型定義)的做用是定義 XML 文檔的合法構建模塊。

DTD 能夠在 XML 文檔內聲明,也能夠外部引用。

1:內部聲明:<!DOCTYPE   根元素   [元素聲明]  > 

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

2:外部聲明(引用外部DTD):<!DOCTYPE 根元素 SYSTEM "文件名">  

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://127.0.0.1/note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note> 

#而http://127.0.0.1/note.dtd的內容爲
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

DTD實體

DTD實體是用於定義引用普通文本或特殊字符的快捷方式的變量,能夠 內部聲明外部引用
實體又分爲通常實體參數實體

  • 通常實體的聲明語法:<!ENTITY 實體名 "實體內容「>                  引用實體的方式:&實體名;
  • 參數實體只能在DTD中使用,參數實體的聲明格式: <!ENTITY %實體名  "實體內容「>        引用實體的方式:%實體名;

內部實體聲明<!ENTITY   實體名稱    "實體的值"> 

#通常實體
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]>
<test>&writer;&copyright;</test>

外部實體聲明:<!ENTITY  實體名稱   SYSTEM    "URI">

#通常實體
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY  writer  SYSTEM  "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY  copyright  SYSTEM  "http://www.w3school.com.cn/dtd/entities.dtd">
]>
<author>&writer;&copyright;</author>

#參數實體
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY  %writer  SYSTEM  "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY  %copyright  SYSTEM  "http://www.w3school.com.cn/dtd/entities.dtd">
]>
<author>%writer;%copyright;</author>

JSON

JSON全稱JavaScaript對象表示法(JavaScript Object Notation),是存儲和交換文本信息的語法。具備文本量更小、更快和更易解析的特色。Json和HTML不同,HTML主要用於顯示數據,JSON主要用於傳遞數據,因此通常做爲數據的查詢接口。

在 JS 語言中,一切都是對象。所以,任何支持的類型均可以經過 JSON 來表示,例如字符串、數字、對象、數組等。可是對象和數組是比較特殊且經常使用的兩種類型:

  • 對象表示爲鍵值對
  • 數據由逗號分隔
  • 花括號保存對象
  • 方括號保存數組

JSON鍵值對錶 

{ "name":"xie",
  "sex" :"man",
  "id" : "66" }

注意: ""和值之間不能有空格,否則取值的時候會出錯

JSON數組

表示一:
[ { "name":"xie",
    "sex" :"man",
    "id" : "66" },
  { "name":"xiao",
    "sex" :"woman",
    "id" : "88" },
  { "name":"hong",
    "sex" :"woman",
    "id" : "77" }]

表示二:
{
  "name":["xie","xiao","hong"],
  "sex" :["man","woman","woman"],
  "id"  :["66","88","77"]
}

表示三:
{
   "student":[ { "name":"xie",
                 "sex" :"man",
                 "id" : "66" },
               { "name":"xiao",
                 "sex" :"woman",
                 "id" : "88" },
               { "name":"hong",
                 "sex" :"woman",
                 "id" : "77" }]
}

使用python解析JSON數據

對於表示法一和表示法二方法表示的JSON數據,能夠採用下面方法讀取JSON數據

1.json是上面的表示法一 ,2.json是上面的表示法二。能夠看出,雖然數據是同樣的,可是數據讀取出來的排序是不同的。

查詢列的話直接 ['name']  ,查詢行的話data.iloc[0] 表示第一行,或者 data.loc['1'] 表示打印出行名1的那行

而對於表示法三表示的數據,則能夠經過下面的方法讀取。把數據讀取在 jsonObject 對象中,而後訪問數據的話,一層一層的訪問。

jsonString是JSON的字符串格式數據,若是沒有解碼,調用decode() 函數便可

json.loads( jsonString )

XML和JSON的區別 

XML的優缺點

XML的優勢:

  • 格式統一,符合標準;
  • 容易與其餘系統進行遠程交互,數據共享比較方便。

XML的缺點:

  • XML文件龐大,文件格式複雜,傳輸佔帶寬;
  • 服務器端和客戶端都須要花費大量代碼來解析XML,致使服務器端和客戶端代碼變得異常複雜且不易維護;
  • 客戶端不一樣瀏覽器之間解析XML的方式不一致,須要重複編寫不少代碼;
  • 服務器端和客戶端解析XML花費較多的資源和時間。

JSON的優缺點

JSON的優勢:

  • 數據格式比較簡單,易於讀寫,格式都是壓縮的,佔用帶寬小;
  • 易於解析,客戶端JavaScript能夠簡單的經過eval()進行JSON數據的讀取;
  • 支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務器端語言,便於服務器端的解析;
  • 在PHP世界,已經有PHP-JSON和JSON-PHP出現了,偏於PHP序列化後的程序直接調用,PHP服務器端的對象、數組等能直接生成JSON格式,便於客戶端的訪問提取;
  • 由於JSON格式能直接爲服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發量,且完成任務不變,而且易於維護。

JSON的缺點:

  • 沒有XML格式這麼推廣的深刻人心和喜用普遍,沒有XML那麼通用性;
  • JSON格式目前在Web Service中推廣還屬於初級階段。
相關文章
相關標籤/搜索