淺談Json解析與序列化
阿新 • • 發佈:2018-12-26
從頭說起:
首先的首先,什麼是Json:一種資料表示形式,JSON:JavaScript Object Notation物件表示法
Json語法規則:
- 資料在鍵值對中
- 資料由逗號分隔
- 花括號儲存物件
- 方括號儲存陣列
{ "firstName":"John" , "lastName":"Doe" }
這樣:
{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }
或者這樣:
var employees = [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName": "Carter" } ];
那什麼是物件序列化呢?
專業術語如是解釋:
序列化是將物件狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為物件。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料。
通俗講呢:物件序列化就是指將物件的狀態轉換為字串
JSON物件
我們都知道eval()函式可以將Json轉換為Javascript物件。Js內建的eavl()函式用Json資料來生成原生的JavaScript物件。
這是早期的Json解析器解析方法,erjson物件有兩個方法:stringify()和parse()
這兩個方法分別用於將js物件序列化為json字串和把json字串解析誒原生的js值
下面來詳細說說這兩個函式:
一、JSON序列化
Json.stringify()
作用:序列化原始值、物件、陣列
語法:JSON.stringify(value [, replacer] [, space])
引數:
value:要轉換成JSON字串的原始值、物件或陣列
replacer:可選引數,一個數組或函式
space:可選引數,一個數值或一個字串
返回:JSON格式的字串,代表value
<script>
var myMes= {
"name": "ys",
"age": 12
};
console.log(typeof myMes);//Object
var jsonText = JSON.stringify(myMes);
console.log(typeof jsonText);//String
</script>
成功將json物件轉化為json字串。
1、json資料過濾
a.如果過濾器引數是陣列,那麼JSON.stringify()結果中將只包含陣列中列出的屬性。 var myMes = {
"name": "ys",
"age": 12,
"like": "drink",
"nationality": "China"
};
/*實現過濾,只留下name和age*/
var jsonText = JSON.stringify(myMes, ["name", "age"]);
console.log(jsonText); //{"name": "ys", "age": 12}
b.如果第二個引數是函式,傳入的函式要接收兩個引數,再按照相應的需求做出處理
var myMes= {
"name": "ys",
"age": 12,
"like": "drink",
"nationality": "China"
};
var jsonText = JSON.stringify(myMes, function(key, value){
switch(key){
case "name":
return "名字改變了";
default:
return value;
}
}, 4);
console.log(jsonText);
結果如圖:
2.字串縮排
第三個引數就是用來實現字串縮排的,數字幾就表示縮排幾個空格
var myMes= {
"name": "ys",
"age": 12,
"like": "drink",
"nationality": "China"
};
var jsonText = JSON.stringify(myMes, ["name", "age"], 4);
console.log(jsonText);//{"name": "ys", "age": 12}
結果如圖:如果不加第三個引數的話效果:
二、JSON解析
1.作用
解析JSON格式的字串
2.語法
JSON.parse(s[, reviver])
3.引數
s,要解析的字串
reviver,可選引數,用來轉換解析值的可選函式
4.返回
一個物件、陣列或原始值。該返回值是從s中解析的(還有可能被reviver修改過);
看一個例子先: var myMes= {
"name": "ys",
"age": 12
};
console.log(typeof myMes);//Object
//為了模擬json字串
var jsonText = JSON.stringify(myMes);
console.log(typeof jsonText);//String
var jsonObj = JSON.parse(jsonText);
console.log(typeof jsonObj);//Object
作用是將json字串轉化為json物件
型別變化:String -> Object
JSON.parse()方法也接收另一個引數,該引數是一個函式,為了區別JSON.string()接收的過濾函式,這個函式被叫做還原函式(reviver),實際上兩個函式的鍵值是相同的——他們都接受兩個引數,並且都需要返回一個值。 提供幾個寫得比較清楚的部落格連結: 開啟連結