日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSON.stringify() / JSON.parse()

發(fā)布時(shí)間:2024/4/17 javascript 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSON.stringify() / JSON.parse() 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JSON.stringify() 這個(gè)方法可以把javascript對象轉(zhuǎn)換成json字符串。

JSON.parse() 這個(gè)方法可以把 json 字符串轉(zhuǎn)換成 javascript對象。

【下面來看一下這兩個(gè)方法的詳細(xì)解答】

json數(shù)據(jù)中沒有變量和結(jié)尾的分號,并且數(shù)據(jù)必須是用雙引號引起來的,單引號會(huì)報(bào)語法錯(cuò)誤。

json的數(shù)據(jù)格式:

{"name":"chef","child":{"name1":"children","age1":["one","two","three"],"hello":"world"},"age":33}

?

JSON.stringify()

  把一段 javascript 對象序列化為 json 字符串忽略縮進(jìn)與空格,并可以把單引號給你改成雙引號,此方法還可以傳入第二個(gè)參數(shù),這第二個(gè)參數(shù)可以是一個(gè)數(shù)組,也可以是一個(gè)函數(shù)。如果是數(shù)組,那么數(shù)組元素一定要與javascript對象中的鍵相匹配(鍵值對的鍵)

如果是一個(gè)數(shù)組,那么表示序列化這個(gè)數(shù)組元素相對應(yīng)的javascript對象的鍵值對

// 此對象貫穿全文 var js = {"name":"chef","child":{"name1":"children","age1":["one","two","three"],"hello":"world"},"age":33}// 把 javascript對象序列化為 json 字符串忽略縮進(jìn)與空格var js_json = JSON.stringify(js);console.log(js_json); //{"name":"chef","child":{"name":"children","age":["one","two","three"],"hello":"world"},"age":33}//序列化選項(xiàng)傳入數(shù)組var js_option = JSON.stringify(js,["child","age"]);//只序列化了指定的 鍵 :child ageconsole.log(js_option); //{"child":{"age":["one","two","three"]},"age":33}

?

?

還可以傳入一個(gè)函數(shù),這個(gè)函數(shù)有兩個(gè)參數(shù),即(key,value)被序列化的json字符串的鍵值對,可以在函數(shù)的內(nèi)部改變這些value

//序列化選項(xiàng) 傳入一個(gè)函數(shù)var js_fn = JSON.stringify(js,function(key,value){switch(key){case "age1"://把a(bǔ)ge1的值用逗號分隔成字符串return value.join(",");case "name1"://把原來的值替換掉return "直接把原來的值修改了";case "hello"://刪除該鍵值對return undefined;//沒有default這句獲取不到數(shù)據(jù)default:return value;}});console.log("傳入函數(shù)的結(jié)果:"+js_fn);//傳入函數(shù)的結(jié)果:{"name":"chef","child":{"name1":"直接把原來的值修改了","age1":"one,two,three"},"age":33}

  

  還可以傳入第三個(gè)參數(shù),(第二個(gè)參數(shù)不傳可以寫null) 第三個(gè)參數(shù)是控制json字符串縮進(jìn)的,它是個(gè)數(shù)字或字符串,數(shù)字最多縮進(jìn)10,如果傳入的大于10則自動(dòng)轉(zhuǎn)化為10,如果傳入的是字符串,則用這個(gè)字符串當(dāng)做縮進(jìn)符來代替空格

//傳入第三個(gè)參數(shù)控制字符串縮進(jìn)var js_indent = JSON.stringify(js,null,4);console.log("縮進(jìn)后的json字符串:"+js_indent);/*瀏覽器執(zhí)行效果:縮進(jìn)后的json字符串:{"name": "chef","child": {"name1": "children","age1": ["one","two","three"],"hello": "world"},"age": 33}*/


toJSON()

  定義在javascript對象中,當(dāng)序列化javascript對象的時(shí)候,會(huì)先調(diào)用toJSON方法然后序列化toJSON返回的值,如果toJSON方法return undefined,那么這個(gè)javascript對象的值就是undefined,如果包含toJSON方法的對象被嵌入在其他的對象里,那么包含toJSON方法的對象的值會(huì)變?yōu)閚ull

var js_tojson = {name:'chef',age:'22',//在javascript對象中這樣定義 toJSON 方法toJSON:function(){return {name:this.name,age:this.age};}};//調(diào)用stringify()方法序列化對象var tojsonText = JSON.stringify(js_tojson);console.log("調(diào)用 toJSON 的結(jié)果:"+tojsonText) //調(diào)用 toJSON 的結(jié)果:{"name":"chef","age":"22"}

【序列化的順序是先檢查 javascript對象中是否有 toJSON方法,如果有那么先執(zhí)行toJSON方法,返回什么就序列化什么】

stringify()參數(shù)的執(zhí)行順序:
  1,第一個(gè)參數(shù)
  2,檢查toJSON并執(zhí)行
  3,第二個(gè)參數(shù)
  4,第三個(gè)參數(shù)

?

?

JSON.parse()

?

把一段json字符串解析為原生javascript值 如果傳給parse()的不是有效的json字符串,這個(gè)方法會(huì)拋出錯(cuò)誤

// 把 json 字符串解析為原生javascript值var json_js = JSON.parse(js_json);console.log(json_js); // Object {name: "chef", child: Object, age: 33}

parse()方法也有第二個(gè)參數(shù),可以給它傳一個(gè)函數(shù),這個(gè)函數(shù)同樣有兩個(gè)值,(key,value)這個(gè)函數(shù)的功能跟 stringify()的第二個(gè)函數(shù)的功能一樣

//==== perse() 的第二個(gè)參數(shù)var perse_fn = {name:"chef",age:66,newDate: new Date()}//先把perse_fn對象轉(zhuǎn)換成json字符串var perse_json = JSON.stringify(perse_fn);//再把json字符串轉(zhuǎn)為javascript對象var perse_js = JSON.parse(perse_json,function(key,value){switch(key){case "name"://可以改變 valuereturn value+"大廚的筆記";case "newDate"://返回時(shí)間對象return new Date();// 這個(gè) default 必須有,不然就 undefined 了,default:return value;}});console.log(perse_js);//Object {name: "chef大廚的筆記", age: 66, newDate: Thu Nov 10 2016 22:52:20 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)}

以上就是本人對 json 的總結(jié)。

?

轉(zhuǎn)載于:https://www.cnblogs.com/chefweb/p/6052821.html

總結(jié)

以上是生活随笔為你收集整理的JSON.stringify() / JSON.parse()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。