欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:JSON教程

柚子快報邀請碼778899分享:JSON教程

http://yzkb.51969.com/

2013 年,ECMA International(歐洲計算機制造商協(xié)會)制定了 JSON 的語法標(biāo)準(zhǔn)——ECMA-404。

經(jīng)過 20 年左右的發(fā)展,JSON 已經(jīng)替代了 XML,成為了 Web 開發(fā)中首選的數(shù)據(jù)交換格式。

為什么要使用 JSON?

JSON 并不是唯一能夠?qū)崿F(xiàn)在互聯(lián)網(wǎng)中傳輸數(shù)據(jù)的方式,除此之外還有一種 XML 格式。JSON 和 XML 能夠執(zhí)行許多相同的任務(wù),那么我們?yōu)槭裁匆褂?JSON,而不是 XML 呢?

之所以使用 JSON,最主要的原因是 JavaScript。眾所周知,JavaScript 是 Web 開發(fā)中不可或缺的技術(shù)之一,而 JSON 是基于 JavaScript 的一個子集,JavaScript 默認(rèn)就支持 JSON,而且只要您學(xué)會了 JavaScript,就可以輕松地使用 JSON,不需要學(xué)習(xí)額外的知識。

另一個原因是 JSON 比 XML 的可讀性更高,而且 JSON 更加簡潔,更容易理解。

與 XML 相比,JSON 具有以下優(yōu)點:

結(jié)構(gòu)簡單、緊湊:與 XML 相比,JSON 遵循簡單、緊湊的風(fēng)格,有利于程序員編輯和閱讀,而 XML 相對比較復(fù)雜;更快:JSON 的解析速度比 XML 更快(因為 XML 與 HTML 很像,在解析大型 XML 文件時需要消耗額外的內(nèi)存),存儲同樣的數(shù)據(jù),JSON 格式所占的存儲空間更?。豢勺x性高:JSON 的結(jié)構(gòu)有利于程序員閱讀。

JSON 的不足

任何事物都不可能十全十美,JSON 也不例外,比如:

只有一種數(shù)字類型:JSON 中只支持 IEEE-754 雙精度浮點格式,因此您無法使用 JSON 來存儲許多編程語言中多樣化的數(shù)字類型;沒有日期類型:在 JSON 中您只能通過日期的字符串(例如:1970-01-01)或者時間戳(例如:1632366361)來表示日期;沒有注釋:在 JSON 中無法添加注釋;冗長:雖然 JSON 比 XML 更加簡潔,但它并不是最簡潔的數(shù)據(jù)交換格式,對于數(shù)據(jù)量龐大或用途特殊的服務(wù),您需要使用更加高效的數(shù)據(jù)格式。

JSON 應(yīng)該如何存儲?

JSON 數(shù)據(jù)可以存儲在 .json 格式的文件中(與 .txt 格式類似,都屬于純文本文件),也可以將 JSON 數(shù)據(jù)以字符串的形式存儲在數(shù)據(jù)庫、Cookie、Session 中。

要使用存儲好的 JSON 數(shù)據(jù)也非常簡單,不同的編程語言中提供了不同的方法來檢索和解析 JSON 數(shù)據(jù),例如 JavaScript 中的 JSON.parse() 和 JSON.stringify()、PHP 中的 json_decode() 和 json_encode()。

什么時候會使用 JSON

簡單了解了 JSON 之后,我們再來看看什么時候適合使用 JSON。

1) 定義接口

JSON 使用最多的地方莫過于 Web 開發(fā)領(lǐng)域了,現(xiàn)在的數(shù)據(jù)接口基本上都是返回 JSON 格式的數(shù)據(jù),比如:

使用 Ajax 異步加載的數(shù)據(jù);RPC 遠(yuǎn)程調(diào)用;前后端分離,后端返回的數(shù)據(jù);開發(fā) API,例如百度、高德的一些開放接口。

這些接口一般都會提供一個接口文檔,說明接口調(diào)用的方法、需要的參數(shù)以及返回數(shù)據(jù)的介紹等。

2) 序列化

程序在運行時所有的變量都是存儲在內(nèi)存中的,如果程序重啟或者服務(wù)器宕機,這些數(shù)據(jù)就會丟失。一般情況下運行時變量并不是很重要,丟了就丟了,但有些數(shù)據(jù)則需要保存下來,供下次程序啟動或其它程序使用。

我們可以將這些數(shù)據(jù)保存到數(shù)據(jù)庫中,也可以保存到一個文件中,這個將內(nèi)存中數(shù)據(jù)保存起來的過程稱為序列化。序列化在 Python 中稱為 pickling,在其他語言中也被稱為 serialization、marshalling、flattening 等等,都是一個意思。

通常情況下,序列化是將程序中的對象直接轉(zhuǎn)換為可保存或者可傳輸?shù)臄?shù)據(jù),但這樣會保存對象的類型信息,無法做到跨語言使用,例如我們使用 Python 將數(shù)據(jù)序列化到硬盤,然后使用 Java 來讀取這份數(shù)據(jù),這時由于不同編程語言的數(shù)據(jù)類型不同,就會造成讀取失敗。如果在序列化之前,先將對象信息轉(zhuǎn)換為 JSON 格式,則不會出現(xiàn)此類問題。

3) 生成 Token

Token 的形式多種多樣,JSON、字符串、數(shù)字等都可以用來生成 Token,JSON 格式的 Token 最有代表性的是 JWT(JSON Web Tokens)。

隨著技術(shù)的發(fā)展,分布式 Web 應(yīng)用越來越普及,通過 Session 管理用戶登錄狀態(tài)的成本越來越高,因此慢慢發(fā)展為使用 Token 做登錄身份校驗,然后通過 Token 去取 Redis 中緩存的用戶信息。隨著之后 JWT 的出現(xiàn),校驗方式變得更加簡單便捷,無需再通過 Redis 緩存,而是直接根據(jù) Token 讀取保存的用戶信息。

4) 配置文件

我們還可以使用 JSON 來作為程序的配置文件,最具代表型的是 npm(Node.js 的包管理工具)的 package.json 包管理配置文件,如下所示:

{ “name”: “server”, “version”: “0.0.0”, “private”: true, “main”: “server.js”, “scripts”: { “start”: “node ./bin/www” }, “dependencies”: { “cookie-parser”: “~1.4.3”, “debug”: “~2.6.9”, “express”: “~4.16.0”, “http-errors”: “~1.6.2”, “jade”: “~1.11.0”, “morgan”: “~1.9.0” } }

提示:雖然 JSON 可以用來定義配置文件,但由于 JSON 中不能添加注釋,使得配置文件的可讀性較差。

總結(jié)

JSON 是一種輕量級的數(shù)據(jù)交換格式,它是基于 JavaScript 的一個子集,采用完全獨立于編程語言的格式來表示數(shù)據(jù),可以跨語言、跨平臺使用。簡潔清晰的層次結(jié)構(gòu)使得 JSON 逐漸替代了 XML,成為了最理想的數(shù)據(jù)交換格式,廣泛應(yīng)用于 Web 開發(fā)領(lǐng)域。

JSON語法規(guī)則

JSON 的語法與 JavaScript 中的對象很像,在 JSON 中主要使用以下兩種方式來表示數(shù)據(jù):

Object(對象):鍵/值對(名稱/值)的集合,使用花括號{ }定義。在每個鍵/值對中,以鍵開頭,后跟一個冒號:,最后是值。多個鍵/值對之間使用逗號,分隔,例如{"name":"C語言中文網(wǎng)","url":"http://c.biancheng.net"};Array(數(shù)組):值的有序集合,使用方括號[ ]定義,數(shù)組中每個值之間使用逗號,進行分隔。

下面展示了一個簡單的 JSON 數(shù)據(jù):

{ “Name”:“C語言中文網(wǎng)”, “Url”:“http://c.biancheng.net/”, “Tutorial”:“JSON”, “Article”:[ “JSON 是什么?”, “JSONP 是什么?”, “JSON 語法規(guī)則” ] }

注意:所有 JSON 數(shù)據(jù)需要包裹在一個花括號中,類似于 JavaScript 中的對象。

JSON 中的鍵

JSON 數(shù)據(jù)是以鍵/值對(名稱/值)的形式書寫的,鍵表示數(shù)據(jù)的名稱,需要以字符串的形式定義(在雙引號中定義),后面緊跟一個冒號,最后是值,如下例所示:

“name”:“C語言中文網(wǎng)”

類似于 JavaScript 對象中的:

name:“C語言中文網(wǎng)”

JSON 中的值

JSON 中的值可以是以下數(shù)據(jù)類型:

數(shù)字(整數(shù)或浮點數(shù));字符串(需要在雙引號中定義);布爾值(true 或 false);數(shù)組(在方括號中定義);對象(在花括號中定義);null(空)。

另外,在 JSON 中,不同的鍵/值對之間需要使用逗號進行分隔,如下例所示:

{ “number”:123, “float”:3.14, “string”:“C語言中文網(wǎng)”, “bool”:true, “array”:[ “employees”, {“name”:“peter”, “age”: 18}, {“name”:“Anna”, “age”: 16} ], “object”:{ “name”:“C語言中文網(wǎng)”, “url”:“http://c.biancheng.net/” } }

在使用 JSON 時,有以下幾點需要注意:

JSON 是一段包裹在花括號中的數(shù)據(jù),數(shù)據(jù)由若干鍵/值對組成;鍵和值之間使用冒號分隔;不同的鍵/值對之間使用逗號分隔;鍵需要以字符串的形式定義(即使用雙引號包裹,注意:不能使用單引號);值可以是數(shù)字、字符串、布爾值、數(shù)組、對象、null;鍵必須是唯一的,不能重復(fù),否則后定義的鍵/值對會覆蓋前面定義的鍵/值對;JSON 中不可以使用八進制或十六進制表示數(shù)字。

JSON 與 JavaScript 對象的區(qū)別

粗略的看起來,您可能覺得 JSON 就是一個 JavaScript 的對象,但其實不是這樣的,JSON 與 JavaScript 對象之間還是有區(qū)別的。

首先,JSON 是一種數(shù)據(jù)交換格式,可以跨語言、跨平臺使用,它只是與 JavaScript 有些淵源,并不是 JavaScript 的一部分。

就語法而言,JSON 與 JavaScript 最主要的區(qū)別就是,JSON 中每個鍵都必須是一個字符串,而 JavaScript 對象則沒有這個限制,如下所示:

// JavaScript 中的對象 { foo: “bar” }

// JSON { “foo”: “bar” }

另外,在 JavaScript 對象中,您既可以使用雙引號也可以使用單引號,但在 JSON 中只能使用雙引號。還有就是 JSON 中沒有日期類型,也不能定義注釋,所以您只能通過日期的字符串(例如:1970-01-01)或者時間戳(例如:1632366361)來表示日期。

JSON數(shù)據(jù)類型

JSON 是 Web 開發(fā)中使用最廣泛的數(shù)據(jù)交換格式,它獨立于編程語言,能夠被大多數(shù)編程語言使用。本節(jié)我們來詳細(xì)介紹一下 JSON 中支持的數(shù)據(jù)類型。

JSON 中支持的數(shù)據(jù)類型可以分為簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型兩種,其中簡單數(shù)據(jù)類型包括:string(字符串)、number(數(shù)字)、boolean(布爾值)和 null(空);復(fù)雜數(shù)據(jù)類型包括:Array(數(shù)組)和 Object(對象)。

1、字符串

JSON 中的字符串需要使用雙引號定義(注意:不能使用單引號),字符串中可以包含零個或多個 Unicode 字符。另外,JSON 的字符串中也可以包含一些轉(zhuǎn)義字符,例如:

\\反斜線本身;\/正斜線;\"雙引號\b退格;\f換頁;\n換行;\r回車;\t水平制表符;\u四位的十六進制數(shù)字。

示例代碼如下:

{ “name”:“C語言中文網(wǎng)”, “url”:“http://c.biancheng.net/”, “title”:“JSON 數(shù)據(jù)類型” }

2、數(shù)字

JSON 中不區(qū)分整型和浮點型,只支持使用 IEEE-754 雙精度浮點格式來定義數(shù)字。此外,JSON 中不能使用八進制和十六進制表示數(shù)字,但可以使用 e 或 E 來表示 10 的指數(shù)。

IEEE-754 表示二進制浮點數(shù)算術(shù)標(biāo)準(zhǔn),是 20 世紀(jì) 80 年代以來使用最廣泛的浮點數(shù)運算標(biāo)準(zhǔn)。

示例代碼如下:

{ “number_1” : 210, “number_2” : -210, “number_3” : 21.05, “number_4” : 1.0E+2 }

3、布爾值

JSON 中的布爾值與 JavaScript、PHP、Java 等編程語言中相似,有兩個值,分別為 true(真)和 false(假),如下例所示:

{ “message” : true, “pay_succeed” : false }

4、空

null(空)是 JSON 中的一個特殊值,表示沒有任何值,當(dāng) JSON 中的某些鍵沒有具體值時,就可以將其設(shè)置為 null,如下例所示:

{ “id” : 1, “visibility” : true, “popularity” : null }

5、對象

JSON 中,對象由花括號{ }以及其中的若干鍵/值對組成,一個對象中可以包含零個或多個鍵/值對,每個鍵/值對之間需要使用逗號,分隔,如下例所示:

{ “author”: { “name”: “C語言中文網(wǎng)”, “url”: “http://c.biancheng.net/” } }

6、數(shù)組

JSON 中,數(shù)組由方括號[ ]和其中的若干值組成,值可以是 JSON 中支持的任意類型,每個值之間使用逗號,進行分隔,如下例所示:

{ “course” : [ “JSON 教程”, “JavaScript 教程”, “HTML 教程”, { “website” : “C語言中文網(wǎng)”, “url” : “http://c.biancheng.net” }, [ 3.14, true ], null ] }

JSON對象(object)

在 JSON 中,對象是一個無序的、鍵/值對的集合,一個對象以左花括號{開始,以右花括號}結(jié)束,左右花括號之間為對象中的若干鍵/值對。鍵/值對中,鍵必須是字符串類型(即使用雙引號將鍵包裹起來),而值可以是 JSON 中的任意類型,鍵和值之間需要使用冒號:分隔開,不同的鍵/值對之間需要使用逗號,分隔開。關(guān)于 JSON 中支持的數(shù)據(jù)類型,您可以查閱《JSON數(shù)據(jù)類型》一節(jié)。

下面來看一個 JSON 對象的例子:

{ “website”: { “name” : “C語言中文網(wǎng)”, “url” : “http://c.biancheng.net/” } }

通過上面的示例可以看出,整個 JSON 就是一個對象類型,在這個對象中包含一個名為“website”的鍵,與鍵所對應(yīng)的值同樣也是一個對象,對象中包含“name”、“url”等鍵,以及與鍵所對應(yīng)的值。

在 JSON 中使用對象類型時,有以下幾點需要注意:

對象必須包裹在花括號{ }中;對象中的內(nèi)容需要以鍵/值對的形式編寫;鍵必須是字符串類型,即使用雙引號" "將鍵包裹起來;值可以是任意 JSON 中支持的數(shù)據(jù)類型(例如字符串、數(shù)字、對象、數(shù)組、布爾值、null 等);鍵和值之間使用冒號進行分隔;不同鍵/值對之間使用逗號進行分隔;對象中的最后一個鍵/值對末尾不需要添加逗號。

另外,JSON 對象中可以嵌套其它的任意類型,例如對象、數(shù)組等,如下例所示:

// 鍵/值對中,鍵必須使用雙引號定義,值若是字符串類型也必須使用雙引號定義 { “name”: “C語言中文網(wǎng)”, “age”: 18, “url”: “http://c.biancheng.net/”, “course”: { “title”: “JSON教程”, “l(fā)ist”: [ “JSON是什么?”, “JSON語法規(guī)則”, “JSON數(shù)據(jù)類型” // 這個地方不能添加逗號,因為它是數(shù)組中最后一個值 ] // 這個地方也不能添加逗號,因為它是對象中最后一個鍵/值對 } // 這個地方也不可以有逗號,因為它也是對象的最后一個鍵/值對 }

提示:上面示例中,注釋不是 JSON 的一部分,因為 JSON 中不支持定義注釋。使用上述 JSON 數(shù)據(jù)之前,需要先將注釋內(nèi)容刪除。

JSON數(shù)組(array)

數(shù)組是值的有序集合,JSON 中的數(shù)組與 JavaScript 中的數(shù)組相似,同樣需要使用方括號[ ]定義,方括號中為數(shù)組中的若干值,值可以是 JSON 中支持的任意類型(例如字符串、數(shù)字、布爾值、對象、數(shù)組等),每個值之間使用逗號,分隔開,具體語法格式如下:

[value_1, value_2, value_3, …, value_N]

下面來看一個 JSON 數(shù)組的示例:

{ “array”:[ { “name”:“C語言中文網(wǎng)”, “url”:“http://c.biancheng.net/”, “course”:“JSON教程” }, [ “JSON是什么?”, “JSON語法規(guī)則”, “JSON數(shù)據(jù)類型” ], “JSON”, 18, true ] }

通過上面的示例可以看出,JSON 中數(shù)組與對象不同,對象是由若干鍵/值對組成,而數(shù)組則是由若干值構(gòu)成的。數(shù)組中的值可以是 JSON 中的任意類型,在上面的示例中就分別使用了對象、數(shù)組、字符串、數(shù)字、布爾值等類型。

在 JSON 中使用數(shù)組時,有以下幾點需要注意:

數(shù)組必須使用方括號[ ]定義;數(shù)組的內(nèi)容由若干值組成;每個值之間需要使用逗號,進行分隔;最后一個值末尾不需要添加逗號;數(shù)組中的值可以是 JSON 中的任何類型,例如字符串、數(shù)字、對象、數(shù)組、布爾值、null 等。

JSON注釋

JSON 是一種純粹的數(shù)據(jù)交換格式,其簡單、靈活的特性使得 JSON 適合被用于各種不同的場景,例如在配置文件中、在接口返回的數(shù)據(jù)中都會用到 JSON 格式。然而 JSON 卻有一個非常明顯的缺點,那就是 JSON 不能像編程語言那樣添加注釋,JSON 中的任何內(nèi)容都會看作數(shù)據(jù)的一部分。

之所以不允許添加注釋,是因為 JSON 主要是用來存儲數(shù)據(jù)的,過多的注釋會對數(shù)據(jù)的可讀性造成影響,同時也會造成數(shù)據(jù)體積變大,進而影響數(shù)據(jù)傳輸、解析的速度。

但是,在某些場景中,我們又需要使用注釋。例如在 JSON 格式的配置文件中,我們希望以注釋的形式對配置信息進行解釋說明;在接口返回的 JSON 數(shù)據(jù)中,我們希望通過注釋描述數(shù)據(jù)的含義等等。那么我們要怎么在 JSON 數(shù)據(jù)中添加注釋呢?下面就來介紹幾種方法。

使用特殊的鍵名

想要在 JSON 中添加注釋,我們可以在要添加注釋鍵/值對的前面(或后面)添加一個同名的鍵,并在鍵名中添加一個特殊字符加以區(qū)分,例如@、#、?、_、/等,然后在與鍵對應(yīng)的值中定義注釋的內(nèi)容。

注意:在鍵名中添加特殊字符時,應(yīng)盡量避免:、{、}、[、]等 JSON 中常用的字符。

下面通過一個簡單的示例來演示一下如何通過特殊的鍵名在 JSON 中添加注釋:

{ “@name”: “網(wǎng)站名稱”, “name”: “C語言中文網(wǎng)”, “_url”: “網(wǎng)址”, “url”: “http://c.biancheng.net/”, “course”: “JSON 教程”, “@charge”: “0=收費; 1=免費”, “charge”: 1, “#list”: “教程目錄”, “l(fā)ist”: [ “JSON數(shù)據(jù)類型”, “JSON對象”, “JSON數(shù)組” ], “message”: { “code”: 0, “message”: “OK”, “#data”: { “#id”: “用戶ID”, “#type”: “0=正常; 1=異常”, “#name”: “姓名”, “#createTime”: “創(chuàng)建時間(yyyy-MM-dd)” }, “data”: { “id”: “12345”, “type”: 0, “name”: “我的名字”, “createTime”: “2020-05-20” } } }

除了可以在鍵名中添加特殊字符外,也可以直接以“comment”、“_comment” 或 “__comment”作為鍵名來定義注釋,如下例所示:

{ “_comment”: “C語言中文網(wǎng)(http://c.biancheng.net/)—— 一個在線學(xué)習(xí)編程的網(wǎng)站”, “course”: { “name”: “JSON 教程”, “url”: “http://c.biancheng.net/json/index.html” } }

JSON5

JSON5 是由開發(fā)人員創(chuàng)建并在 GitHub(https://github.com/json5/json5/tree/4cf57da675f55c619f959132eb58a5683ca4a9c7)上發(fā)布的 JSON 的非官方標(biāo)準(zhǔn),可以將它看作是 JSON 的升級版。JSON5 主要是通過引入部分 ECMAScript5.1 的特性來擴展 JSON 語法,減少 JSON 的某些限制,同時兼容現(xiàn)有的 JSON 格式。

與 JSON 相比,JSON5 做出了如下改變:

在對象或數(shù)組的末尾(即最后一個鍵/值對或值),可以添加逗號;字符串可以使用單引號定義;字符串中可以包含轉(zhuǎn)義字符,并且可以跨越多行;可以定義十六進制的數(shù)字;數(shù)字可以包含前導(dǎo)或后導(dǎo)的小數(shù)點;數(shù)字前可以添加一個加、減號來表示正負(fù)數(shù);可以使用//來定義單行注釋,使用/* ... */來定義多行注釋。

如下例所示:

{ // 網(wǎng)站名稱 “name”: “C語言中文網(wǎng)”, // 網(wǎng)址 “url”: “http://c.biancheng.net/”, “course”: “JSON 教程”, // 0=收費; 1=免費 “charge”: 1, // 教程目錄 “l(fā)ist”: [ “JSON數(shù)據(jù)類型”, “JSON對象”, “JSON數(shù)組” ], “message”: { “code”: 0, “message”: “OK”, /* id = 用戶ID type = 0=正常; 1=異常 name = 姓名 createTime = 創(chuàng)建時間(yyyy-MM-dd) */ “data”: { “id”: “12345”, “type”: 0, “name”: “我的名字”, “createTime”: “2020-05-20” } } }

要使用 JSON5 非常簡單,如果是在前端中使用,您可以直接引入一個 js 文件,如下例所示:

上面引入的 js 文件會創(chuàng)建一個全局的 JSON5 對象,示例代碼如下:

JavaScript

運行結(jié)果如下圖所示:

圖:在網(wǎng)頁中引用 JSON5

此外,您也可以通過 Node.js 來安裝 JSON5,安裝命令如下:

npm install json5

安裝成功后可以通過const JSON5 = require('json5')來創(chuàng)建全局的 JSON5 對象,如下例所示:

C:\Users\79330>npm install json5 npm WARN saveError ENOENT: no such file or directory, open ‘C:\Users\79330\package.json’ npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open ‘C:\Users\79330\package.json’ npm WARN 79330 No description npm WARN 79330 No repository field. npm WARN 79330 No README data npm WARN 79330 No license field.

json5@2.2.0 added 2 packages from 5 contributors and audited 2 packages in 2.525s found 0 vulnerabilities

C:\Users\79330>node Welcome to Node.js v14.17.6. Type “.help” for more information.

const JSON5 = require(‘json5’) undefined var arr = { … // 網(wǎng)站名稱 … “name”: “C語言中文網(wǎng)”, … // 網(wǎng)址 … “url”: “http://c.biancheng.net/”, … “course”: “JSON 教程”, … // 0=收費; 1=免費 … “charge”: 1, … // 教程目錄 … “l(fā)ist”: [ … “JSON數(shù)據(jù)類型”, … “JSON對象”, … “JSON數(shù)組” … ], … “message”: { … “code”: 0, … “message”: “OK”, … /* … id = 用戶ID … type = 0=正常; 1=異常 … name = 姓名 … createTime = 創(chuàng)建時間(yyyy-MM-dd) … */ … “data”: { … “id”: “12345”, … “type”: 0, … “name”: “我的名字”, … “createTime”: “2020-05-20” … } … }; undefined JSON5.stringify(arr) “{name:‘C語言中文網(wǎng)’,url:‘http://c.biancheng.net/’,course:‘JSON 教程’,charge:1,list:[‘JSON數(shù)據(jù)類型’,‘JSON對象’,‘JSON數(shù)組’],message:{code:0,message:‘OK’,data:{id:‘12345’,type:0,name:‘我的名字’,createTime:‘2020-05-20’}}}”

JSON和XML的區(qū)別

JSON 和 XML 都是基于文本的可讀格式,獨立于編程語言,能夠在幾乎所有的編程語言中使用。本節(jié)我們就來介紹一下 JSON 和 XML 的區(qū)別。

在介紹 JSON 和 XML 的區(qū)別之前,我們先來分別介紹一下 JSON 和 XML。

什么是 XML?

XML 全稱“Extensive Markup Language”,譯為“可擴展標(biāo)記語言”,是一種源自 SGML 的、基于文本的數(shù)據(jù)格式(XML 是 SGML 的一個子集)。

SGML 全稱“Standard Generalized Markup language”,譯為“標(biāo)準(zhǔn)通用標(biāo)記語言”,簡稱“通用標(biāo)言”,是一種定義電子文檔結(jié)構(gòu)和描述其內(nèi)容的國際標(biāo)準(zhǔn)語言,是 1986 年國際標(biāo)準(zhǔn)化組織出版發(fā)布的一個信息管理方面的國際標(biāo)準(zhǔn)。

XML 是一種專門為了存儲數(shù)據(jù)而創(chuàng)建的標(biāo)記語言,它的編寫方式與 HTML 非常相似,能夠通過不同的標(biāo)簽來標(biāo)記不同的內(nèi)容,下面展示了一個簡單 XML 數(shù)據(jù):

JSON教程 C語言中文網(wǎng) http://c.biancheng.net/

JSON是什么?JSONP是什么?JSON語法規(guī)則XML 旨在傳輸或保存數(shù)據(jù),而不是顯示數(shù)據(jù),在 XML 中,沒有預(yù)定義標(biāo)簽,其中使用的所有標(biāo)簽都是自定義的,而且所有的標(biāo)簽都由兩個部分組成,分別是開始標(biāo)簽(例如)和結(jié)束標(biāo)簽(例如)。需要注意的是,XML 中的標(biāo)簽是區(qū)分大小寫的。

XML 的主要優(yōu)點是它可以跨平臺、跨語言進行傳輸。另外,XML 數(shù)據(jù)可以保存在格式為 .xml 的文本文件中。

什么是 JSON?

JSON 全稱“JavaScript Object Notation”,譯為“JavaScript 對象簡譜”或“JavaScript 對象表示法”,是一種輕量級的、基于文本的、開放的數(shù)據(jù)交換格式。與 XML 相同,JavaScript 同樣可以跨平臺、跨語言傳遞數(shù)據(jù)。

JSON 數(shù)據(jù)的結(jié)構(gòu)類似于一個 JavaScript 對象,如下例所示:

{ “title”:“JSON教程”, “author”:“C語言中文網(wǎng)”, “url”:“http://c.biancheng.net/”, “catalogue”:[ “JSON是什么?”, “JSONP是什么?”, “JSON語法規(guī)則” ] }

JSON 的優(yōu)點在于其結(jié)構(gòu)靈活,所有的瀏覽器都支持。而且 JSON 語法簡單,大多數(shù)編程語言都支持 JSON(有些本身就支持,有些可以通過第三方庫得到支持)。另外,JSON 數(shù)據(jù)可以存儲在 .json 格式的文本文件中。

有關(guān) JSON 的詳細(xì)介紹,您可以查閱《JSON是什么?》一節(jié)。

JSON 與 XML 之間的差異

盡管 JSON 和 XML 的功能非常相似,但它們之間還是存在一些差異的,如下表所示:

JSONXMLJSON 是一種數(shù)據(jù)格式XML 是一種標(biāo)記語言與 XML 相比,JSON 數(shù)據(jù)更容易閱讀XML 文檔相對來說閱讀起來比較困難JSON 數(shù)據(jù)可以存儲在 .json 格式的文本文件中XML 數(shù)據(jù)可以存儲在 .xml 格式的文本文件中JSON 中支持字符串、數(shù)字、數(shù)組、布爾值等類型XML 中只有字符串類型JSON 沒有顯示功能XML 提供了顯示數(shù)據(jù)的能力,因為它是一種標(biāo)記語言JSON 僅支持 UTF-8 編碼XML 支持各種編碼JSON 不支持注釋XML 支持注釋JSON 不支持命名空間XML 支持命名空間JSON 讀寫速度更快,且更容易解析相對于 JSON,XML 數(shù)據(jù)結(jié)構(gòu)更加復(fù)雜,解析速度相對較慢相對于 XML,JSON 的安全性較低相對于 JSON,XML 的安全性更高

JSON 與 XML 之間的相似之處

除了有許多不同的地方外,JSON 與 XML 之間也有許多相似的地方,最主要的就是,它們的用途是相同的,即存儲和傳輸數(shù)據(jù)。其次,它們都可以存儲在文本文件中,程序員無需借助計算機就可以讀寫它們中的內(nèi)容。

此外,在 HTTP 請求中,JSON 和 XML 都能夠作為傳輸數(shù)據(jù)的類型,在服務(wù)器與客戶端之間進行傳遞。

JSON對比工具

JSON 是 Web 開發(fā)領(lǐng)域中最常用的數(shù)據(jù)傳輸格式之一,因為 JSON 的可讀性較高,對于一些簡單的 JSON 數(shù)據(jù),我們不需要借助任何工具就可以輕易的讀取。但對于復(fù)雜的 JSON 數(shù)據(jù)就需要借助工具才行,本節(jié)我們來介紹一些 JSON 對比工具。

要對比 JSON 數(shù)據(jù),最簡單的方法就是借助在線工具,在線工具即不需要安裝,也不需要配置環(huán)境就可以拿來使用,在網(wǎng)絡(luò)中可以找到許多優(yōu)秀的 JSON 在線對比工具,如下所示:

https://jsoncompare.org/https://jsoncompare.com/#!/diff/https://jsondiff.org/http://jsondiff.com/http://www.jsondiff.com/https://extendsclass.com/json-diff.htmlhttps://www.textcompare.org/json/https://jsoncompare.org/https://alldiff.in/https://bestjsonformatter.com/json-diff/https://www.jsonformatting.com/json-compare/https://url-decode.com/tool/json-diff/https://www.sojson.com/jsondiff.htmlhttps://www.json.cn/http://json365.com/json_comparehttps://jsonlint.com/

以 https://jsondiff.org/ 為例,要對比兩個 JSON 數(shù)據(jù),具體操作如下圖所示:

圖:對比兩個 JSON 數(shù)據(jù)

對比結(jié)果如下圖所示:

圖:JSON 數(shù)據(jù)對比結(jié)果

除了在線工具外,我們也可以通過代碼編輯器來對比 JSON 數(shù)據(jù),例如 Visual Studio Code(簡稱“VS Code”)中就內(nèi)置了文件對比工具,具體操作如下:

首先,選中第一個要對比的文件,點擊鼠標(biāo)右鍵,在彈出的菜單中選擇“選擇以進行比較”或“Select for Compare”,如下圖所示:

圖:選擇第一個要對比的文件

然后,選中第二個要對比的文件,點擊鼠標(biāo)右鍵,在彈出的菜單中選擇“與已選項目進行比較”或“Compare with Selected”,如下圖所示:

圖:選擇第二個要對比的文件

對比結(jié)果如下圖所示:

圖:對比兩個 json 文件

除了 VS Code 外,使用 Sublime Text 編輯器也可以進行文件對比,但是需要在 Sublime Text 中安裝一個名為“Sublimerge”的插件,插件的安裝方法大家可以參考 https://www.cnblogs.com/superjishere/p/11624668.html。插件安裝完成后就可以進行文件對比了,具體操作如下:

首先,在第一個要對比的文件中單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“Sublimerge”→“Compare to View”,如下圖所示:

圖:第一個要對比的文件

然后,在彈出的菜單中選擇第二個要對比的文件,如下圖所示:

圖:第二個要對比的文件

對比結(jié)果如下圖所示:

圖:對比兩個 json 文件

PHP JSON的解析和創(chuàng)建

JSON(全稱“JavaScript Object Notation”)是一種輕量級的數(shù)據(jù)交換格式,易于讀寫,廣泛應(yīng)用于 Web 開發(fā)領(lǐng)域。本節(jié)我們來介紹一下在 PHP 中如何創(chuàng)建和解析 JSON 數(shù)據(jù)。

PHP 中提供了 json_encode() 和 json_decode() 兩個函數(shù)分別創(chuàng)建和解析 JSON 數(shù)據(jù),其中:

json_encode():可以將變量轉(zhuǎn)換為 JSON 格式;json_decode():可以對 JSON 格式的字符串進行解析。

json_encode()

json_encode() 函數(shù)能夠?qū)⒁粋€ PHP 變量轉(zhuǎn)換為 JSON 數(shù)據(jù),其語法格式如下:

json_encode(mixed $value, int $options = 0, int $depth = 512): string | false

參數(shù)說明如下:

$value:要轉(zhuǎn)換的變量,變量可以是任意數(shù)據(jù)類型;$options:可選參數(shù),默認(rèn)值為 0,可選值為以下 PHP 常量:JSON_FORCE_OBJECT、JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS、JSON_INVALID_UTF8_IGNORE、JSON_INVALID_UTF8_SUBSTITUTE、 JSON_NUMERIC_CHECK、JSON_PARTIAL_OUTPUT_ON_ERROR、JSON_PRESERVE_ZERO_FRACTION、JSON_PRETTY_PRINT、JSON_UNESCAPED_LINE_TERMINATORS、JSON_UNESCAPED_SLASHES、JSON_UNESCAPED_UNICODE、JSON_THROW_ON_ERROR。關(guān)于這些常量了解即可,一般不怎么使用,它們的具體含義您可以通過 JSON 常量查閱;$depth:可選參數(shù),用來設(shè)置遞歸的最大深度,它的值必須大于 0,默認(rèn)值為 512,同 $options 參數(shù)一樣,該參數(shù)同樣不怎么使用。

若轉(zhuǎn)換成功,json_encode() 函數(shù)會返回字符串類型的轉(zhuǎn)換結(jié)果,若轉(zhuǎn)換失敗,則返回 false。

【示例】使用 json_encode() 函數(shù)將 PHP 變量轉(zhuǎn)換為 JSON 格式: "JSON教程", "author" => "C語言中文網(wǎng)", "url" => "http://c.biancheng.net/", "catalogue" => [ "JSON是什么?", "JSONP是什么?", "JSON語法規(guī)則" ] ]; echo json\_encode($arr); ?>

運行結(jié)果如下:

{“title”:“JSON\u6559\u7a0b”,“author”:“C\u8bed\u8a00\u4e2d\u6587\u7f51”,“url”:“http://c.biancheng.net/”,“catalogue”:[“JSON\u662f\u4ec0\u4e48\uff1f”,“JSONP\u662f\u4ec0\u4e48\uff1f”,“JSON\u8bed\u6cd5\u89c4\u5219”]}

通過運行結(jié)果可以看出,在使用 json_encode() 函數(shù)將變量轉(zhuǎn)換為 JSON 數(shù)據(jù)時,會將變量中的中文字符編碼為 Unicode 字符(\uXXXX 格式的字符),如果不需要這樣的轉(zhuǎn)換,將 json_encode() 函數(shù)的第二個參數(shù)設(shè)置為 JSON_UNESCAPED_UNICODE 即可,如下例所示: "JSON教程", "author" => "C語言中文網(wǎng)", "url" => "http://c.biancheng.net/", "catalogue" => [ "JSON是什么?", "JSONP是什么?", "JSON語法規(guī)則" ] ]; echo json\_encode($arr,JSON\_UNESCAPED\_UNICODE ); ?>

運行結(jié)果如下:

{“title”:“JSON教程”,“author”:“C語言中文網(wǎng)”,“url”:“http://c.biancheng.net/”,“catalogue”:[“JSON是什么?”,“JSONP是什么?”,“JSON語法規(guī)則”]}

json_decode()

json_decode() 函數(shù)能夠解析 JSON 格式的字符串,并將解析后的結(jié)果保存到一個變量中,其語法格式如下:

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)Go語言工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Go語言全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Golang知識點,真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新

如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024b (備注Go)

一個人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!

JSON_UNESCAPED_UNICODE ); ?>

運行結(jié)果如下:

{“title”:“JSON教程”,“author”:“C語言中文網(wǎng)”,“url”:“http://c.biancheng.net/”,“catalogue”:[“JSON是什么?”,“JSONP是什么?”,“JSON語法規(guī)則”]}

json_decode()

json_decode() 函數(shù)能夠解析 JSON 格式的字符串,并將解析后的結(jié)果保存到一個變量中,其語法格式如下:

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)Go語言工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Go語言全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。 [外鏈圖片轉(zhuǎn)存中…(img-8ays6jEL-1712881140575)] [外鏈圖片轉(zhuǎn)存中…(img-0We6g2zi-1712881140575)] [外鏈圖片轉(zhuǎn)存中…(img-bu3x7Bvr-1712881140576)] [外鏈圖片轉(zhuǎn)存中…(img-s32AYRXB-1712881140577)] [外鏈圖片轉(zhuǎn)存中…(img-iVfkXqjy-1712881140577)]

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Golang知識點,真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新

如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024b (備注Go) [外鏈圖片轉(zhuǎn)存中…(img-tUeAO6YV-1712881140578)]

一個人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!

柚子快報邀請碼778899分享:JSON教程

http://yzkb.51969.com/

好文閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19058551.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄