JSON 基本使用教程
1. JSON 是什么?
- JSON,全稱是 JavaScript Object Notation,即 JavaScript對象標記法。
- JSON是一種輕量級(Light-Meight)、基于文本的(Text-Based)、可讀的(Human-Readable)格式。
- JSON 的名稱中雖然帶有JavaScript,但這是指其語法規(guī)則是參考JavaScript對象的,而不是指只能用于JavaScript 語言。
- JSON無論對于人,還是對于機器來說,都是十分便于閱讀和書寫的,而且相比 XML(另一種常見的數據交換格式),文件更小,因此迅速成為網絡上十分流行的交換格式。
- 近年來JavaScript已經成為瀏覽器上事實上的標準語言,JavaScript 的風靡,與JSON 的流行也有密切的關系。
- 因為JSON本身就是參考JavaScript 對象的規(guī)則定義的,其語法與JavaScript定義對象的語法幾乎完全相同。
- JSON格式的創(chuàng)始人聲稱此格式永遠不升級,這就表示這種格式具有長時間的穩(wěn)定性,10 年前寫的文件,10年后也能用,沒有任何兼容性問題。
2. JSON 的語法規(guī)則是怎樣的?
JSON 的語法規(guī)則十分簡單,可稱得上“優(yōu)雅完美”,總結起來有:
- 數組(Array)用方括號(“
[]”)表示。 - 對象(0bject)用大括號(“
{}”)表示。 - 名稱/值對(
name/value)組合成數組和對象。 - 名稱(
name)置于雙引號中,值(value)有字符串、數值、布爾值、null、對象和數組。 - 并列的數據之間用逗號(“
,”)分隔
{
"name": "xdr630",
"favorite": "programming"
}3. JSON 和 XML
JSON常被拿來與XML做比較,因為JSON 的誕生本來就多多少少要有取代XNL的意思。相比 XML,JSON的優(yōu)勢如下:
- 沒有結束標簽,長度更短,讀寫更快
- 能夠直接被JavaScript解釋器解析
- 可以使用數組
兩者比較
JSON:
{
"name":"兮動人",
"age":22,
"fruits":["apple","pear","grape"]
}XML:
<root> <name>兮動人</name> <age>22</age> <fruits>apple</fruits> <fruits>pear</fruits> <fruits>grape</fruits> </root>
4. JSON的解析和生成(JSON 和 JS 對象互轉)
- 在JavaScript中,有兩個方法與此相關:
JSON.parse和JSON.stringify。
JSON 和 JS 對象互轉
要實現(xiàn)從JSON字符串轉換為JS對象,使用 JSON.parse() 方法:
<script>
var str = '{"name": "兮動人","age":22}';
var obj = JSON.parse(str);
console.log(obj);
</script>
2.要實現(xiàn)從JS對象轉換為JSON字符串,使用 JSON.stringify() 方法:
<script>
var str = '{"name": "兮動人","age":22}';
var obj = JSON.parse(str);
console.log(obj);
var jsonstr = JSON.stringify(obj);
console.log(jsonstr);
</script>
5. JSON格式規(guī)定

1、對象(0bject)
- 對象用大括號(“
{}”)括起來,大括號里是一系列的“名稱/值對”,請看概念圖。

- 兩個并列的數據之間用逗號(“
,”)隔開,注意兩點:
- 使用英文的逗號(“
,”),不要用中文的逗號(“,”) - 最后一個“
名稱/值對“之后不要加逗號
- JSON在線檢查語法:https://www.json.cn/
- 這里報錯說明JSON中Key/Value不能使用單引號

正確寫法

2、數組(Array)
數組表示一系列有序的值,用方括號(“[]”)包圍起來,并列的值之間用逗號分隔,請看概念圖。

例如,以下的數組是合法的:
[1,2,"three","four",true,false,null,[1,2],{"name":"兮動人"}]
3、名稱/值對(Name/Value)
- 名稱(Name)是一個字符串,要用雙引號括起來,不能用單引號,也不能沒有引號,這一點與JavaScript不同。
- 值的類型只有七種:
字符串(string)、數值(number)、對象(object)、數組(array), true、false、null。不能有這之外的類型,例如undefined、函數等。請看概念圖。

字符串(string)的規(guī)則如下:
- 英文雙引號括起來,不能用單引號,也不能沒有。
- 字符串中不能單獨出現(xiàn)雙引號(
”)和右斜杠(“\")。 - 如果要打雙引號或右斜杠,需要使用“
右斜杠+字符”的形式,例如\”和\\,其它的轉義字符也是如此字符串的概念圖。

轉義字符
{
"string":"\\ \" "
}
數值類型,可以使用科學計數法表示

{
"number":1e3,
"n1":1e2,
"n2":-100
}
6. 字符串轉化成對象

- 解析:是指將符合JSON 語法規(guī)則的字符串轉換成對象的過程。
- 不同的編程語言都提供了解析JSON字符串的方法,在這里主要講解JavaScript中的解析方法。主要有三種:
使用eval()
使用JSON.parse()
使用第三方庫,例如JQuery等
1、 eval()
eval()函數的參數是一個字符串,其作用是直接執(zhí)行其中的 JavaScript代碼。- 案例:eval()解析字符串
<script>
var str = "console.log('hello')";
eval(str);
</script>eval 解析字符串的結果:

- eval()能夠解析JSON字符串。從這里也可以看得出,JSON 和JavaScript是高度嵌合的。
- 案例:eval()解析JSON字符串
<script>
var str = '{"name":"兮動人","age":22}';
var obj = eval("("+str+")");
console.log(obj)
</script>
- 但是,現(xiàn)在已經很少直接使用eval()來解析了,如果您的瀏覽器版本真的是很舊,可能才需要這個方法。
- 此外,eval()是一個相對危險的函數,因為字符串中可能含有未知因素。在這里,作為學習,還是要知道這也是一種方法。
- 請注意 eval()的參數,在字符串兩旁加了括號,這是必須的,否則會報錯。因為JSON字符串是被大括號(“
{}”)包圍的,直接放到eval()會被當成語句塊來執(zhí)行,因此要在兩旁加上括號,使其變成表達式。
2、JSON. parse()
- 現(xiàn)在絕大多數瀏覽器都以支持
JSON.parse(),是推薦使用的方式。 - 如果輸入了不符合規(guī)范的字符串,會報錯。
案例:JSON字符串轉換為JS對象
<script>
var str = '{"name":"兮動人","age":22}';
var obj = JSON.parse(str)
console.log(obj)
</script>
JSON.parse()可以有第二個參數,是一個函數。此函數有兩個參數:name和value,分別代表名稱和值。當傳入一個JSON字符串后,JSON的每一組名稱/值對都要調用此函數。該函數有返回值,返回值將賦值給當前的名稱(name)。- 利用第二個參數,可以在解析JSON字符串的同時對數據進行一些處理。
案例:
<script>
var str = '{"name":"兮動人","age":22}';
var obj = JSON.parse(str,fun);
function fun(name,value){
console.log(name+":"+value);
return value
}
console.log(obj)
</script>
可以做判斷處理,當JSON字符串的 name=age 時,設置age的value=14
<script>
var str = '{"name":"兮動人","age":22}';
var obj = JSON.parse(str,fun);
function fun(name,value){
if (name == "age")
value = 14;
return value
}
console.log(obj)
</script>
7. JS對象轉化為字符串

- 序列化,指將 JavaScript 值轉化為JSON字符串的過程。
JSON.stringify()能夠將JavaScript值轉換成JSON字符串。JSON.stringify()生成的字符串可以用JSON.parse()再還原成JavaScript值。
1、參數的含義
JSON.stringify(value[, replacer[, space]])
value:必選參數。被變換的JavaScript值,一般是對象或數組。replace:可以省略。有兩種選擇:函數或數組。 如果是函數,則每一組名稱/值對都會調用此函數,該函數返回一個值,作為名稱的值變換到結果字符串中,如果返回undefined,則該成員被忽略。
案例:
<script>
var obj = {
name: "兮動人",
age: 22
};
console.log(obj);
var jsonstr = JSON.stringify(obj,fun);
function fun(name,value) {
if (name=="age")
value = 18;
return value;
}
console.log(jsonstr)
</script>
- 如果是數組,則只有數組中存在名稱才能夠被轉換,且轉換后順序與數組中的值保持一致。
- 案例:
<script>
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
console.log(obj);
var jsonstr = JSON.stringify(obj,["a","b","c"]);
console.log(jsonstr)
</script>
把順序改下,對應轉換的JSON字符串的數值不變
var jsonstr = JSON.stringify(obj,["c","a","b"]);

3.space:可以省略。這是為了排版、方便閱讀而存在的。可以在JSON字符串中添加空白或制表符等。
2、value的用法
<script>
var obj = {
name: "兮動人",
age: 22
}
console.log(obj);
var jsonstr = JSON.stringify(obj);
console.log(jsonstr)
</script>
- 當有不符合JSON語法規(guī)則時,就不會被轉換成JSON字符串。
- 數組中有函數時會被轉換成
null
<script>
var obj = {
name: "兮動人",
age: 22,
a: undefined,
f: function () {
},
b:[function () {}]
}
console.log(obj);
var jsonstr = JSON.stringify(obj);
console.log(jsonstr)
</script>
3、replace的用法
4、space的用法
案例:在上面的基礎上添加
<script>
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
console.log(obj);
var jsonstr = JSON.stringify(obj,["c","a","b"],"one");
console.log(jsonstr)
</script>
改成制表符:\t
<script>
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
console.log(obj);
var jsonstr = JSON.stringify(obj,["c","a","b"],"\t");
console.log(jsonstr)
</script>
到此這篇關于JSON 基本使用教程的文章就介紹到這了,更多相關JSON 基本使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ng-options和ng-checked在表單中的高級運用(推薦)
AngularJS是當前非常的流行的前端框架,它的語法糖非常多,也極大的方便了前端開發(fā)者。這篇文章主要介紹了ng-options和ng-checked在表單中的高級運用,需要的朋友可以參考下2017-01-01
uniapp開發(fā)小程序實現(xiàn)全局懸浮按鈕的代碼
這篇文章主要介紹了uniapp開發(fā)小程序如何實現(xiàn)全局懸浮按鈕,但是在uniapp中式沒有window對象,和dom元素的,需要獲取頁面上節(jié)點的幾何信息,具體實例代碼詳細跟隨小編一起看看吧2022-03-03
javascript游戲開發(fā)之《三國志曹操傳》零部件開發(fā)(五)可移動地圖的實現(xiàn)
首先來說,我對游戲開發(fā)可以算是不怎么深入,因為現(xiàn)在的程序員愛用canvas,我卻就只會拿幾個div湊和。不過沒關系,因為做出來的同樣是游戲。哈!廢話最近有點多,感興趣的朋友可以了解下2013-01-01

