簡述XML和JSON

序列化是一種語言格式,用于轉(zhuǎn)換對象并將其傳輸?shù)轿募?shù)據(jù)庫或字節(jié)流。XML 和 JSON 是序列化語言格式的類型。
XML(Extensible Markup Language)和 JSON(JavaScript Object Notation)都是數(shù)據(jù)交換格式,用于在不同的應用程序之間傳輸數(shù)據(jù)。本文就來一起學習一下基本的知識,什么是XML?XML和JSON有什么區(qū)別?相互之間如何轉(zhuǎn)換?前面有介紹JavaScript和JSON之間的關系。
數(shù)據(jù)結(jié)構(gòu)類型
- 結(jié)構(gòu)化數(shù)據(jù):有時它也被稱為關系數(shù)據(jù),因為數(shù)據(jù)共享相同的格式和行和列的模式。結(jié)構(gòu)化查詢語言 (SQL) 用于通過簡單查詢查找數(shù)據(jù)。
- 半結(jié)構(gòu)化數(shù)據(jù):在這種類型中,數(shù)據(jù)不相關,因為它們不存儲在行和列模式中。數(shù)據(jù)使用標記、縮進或冒號作為組織中數(shù)據(jù)層次結(jié)構(gòu)的鍵值對。在這里,數(shù)據(jù)序列化起著重要作用,以便開發(fā)人員以可以傳輸給另一個開發(fā)人員/機器的格式制作數(shù)據(jù)。
- 非結(jié)構(gòu)化數(shù)據(jù):此類數(shù)據(jù)為無法以正確格式定義的照片、音頻、日志文件和視頻。與它們相關的元數(shù)據(jù)被認為是半結(jié)構(gòu)化的,但作為一個整體數(shù)據(jù)是非結(jié)構(gòu)化的
什么是XML
XML(Extensible Markup Language)是一種標記語言,它類似于 HTML,但是更加靈活,可以自定義標簽。XML 的設計目標是傳輸數(shù)據(jù),而不是展示數(shù)據(jù)。XML 語言具有良好的可擴展性,可以被用于表示和傳遞任何類型的數(shù)據(jù),過去在 Web 開發(fā)中被廣泛使用。XML 被設計為具有自我描述性,可擴展性和可移植性。
什么是JSON
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,是 JavaScript 中的一種對象表示方法。JSON格式的數(shù)據(jù)通常用于異步瀏覽器/服務器之間的數(shù)據(jù)交換,可以被各種編程語言解析和生成。
JSON數(shù)據(jù)格式和JavaScript中的對象字面量有些相似,在JSON中,所有的屬性名都必須用雙引號包圍,而JavaScript中則可以使用單引號或不用引號。此外,JSON中不支持函數(shù)類型和變量類型,只支持基本數(shù)據(jù)類型和數(shù)組、對象這兩種復合數(shù)據(jù)類型。JSON還有一些其他規(guī)范,如不能包含特殊的控制字符,屬性名必須是字符串,不支持注釋等。
XML 和 JSON 區(qū)別
XML 和 JSON 是兩種常見的數(shù)據(jù)交換格式,主要有以下區(qū)別:
- 數(shù)據(jù)格式:XML 采用標簽格式,JSON 采用鍵值對格式。
- 可讀性:JSON 相對于 XML 更易于閱讀和理解。
- 數(shù)據(jù)量:由于 XML 中包含很多標簽,因此比 JSON 占用更多的空間,數(shù)據(jù)量更大。
- 解析速度:由于 JSON 的數(shù)據(jù)格式較為簡單,因此解析速度比 XML 快。
- 數(shù)據(jù)類型:XML 可以表示任何數(shù)據(jù)類型,而 JSON 只支持少數(shù)數(shù)據(jù)類型,如字符串、數(shù)字、布爾值、數(shù)組和對象。
- 編碼方式:XML 使用
UTF-8編碼方式,JSON 使用UTF-8或UTF-16編碼方式。
JSON 是在 XML 之后開發(fā)的,但隨著時間的推移變得越來越流行。這兩種格式經(jīng)常用于通過 Web API 發(fā)送數(shù)據(jù)
XML 和 JSON 相互轉(zhuǎn)換
了解了 XML 和 JSON 格式后,對于轉(zhuǎn)換可以借助第三方插件 xml-js 和 xml2json
const convert = require("xml-js");
const xmlString = `
<bookstore>
<book category="javascript">
<title>JavaScript: The Definitive Guide, Seventh Edition</title>
<author>David Flanagan</author>
<price>95.90</price>
</book>
<book category="typescript">
<title>TypeScript入門與實戰(zhàn)</title>
<author>鐘勝平</author>
<price>49.50</price>
</book>
</bookstore>
`;
const json = convert.xml2json(xmlString, { compact: true, spaces: 4 });
console.log(json);
const options = { compact: true, ignoreComment: true, spaces: 4 };
const result = convert.json2xml(json, options);
console.log(result);
不同編程語言的處理方法
- Python:在 python 中,序列化由
pickle模塊完成,并且只能使用基于 python 的語言進行反序列化。 - Java:它在內(nèi)部處理那些標記為
java.io.Serializable的對象/類的序列化。 - Javascript:它使用內(nèi)部內(nèi)置方法
JSON.parse()等。 - .Net:它使用三種序列化方法,即
JSON、Binary和XML。 - PHP:該語言使用內(nèi)置方法進行序列化和反序列化,即
serialize()和deserialize()。
總結(jié)
文件格式和數(shù)據(jù)類型對于了解和在不同操作中使用以減少應用程序中的延遲非常重要。