javascript中的json

json是一種輕量級的數(shù)據(jù)交換格式,它基于 ECMAScript 規(guī)范的一個子集痊乾,采用完全獨立于編程語言的文本格式來存儲、表示椭更、傳輸數(shù)據(jù)哪审。json的語法與JavaScript語法及其相似。
json語法規(guī)則:

  1.對象表示為鍵值對
  2.數(shù)據(jù)由逗號分割
  3.花括號保存對象
  4.方括號保存數(shù)組

json語法示例:

var str = {
    "name" : "wgq",
    "age" : "18",
    "arg" : [
        { "teacher" : "ce" ,"firstname" : "wang"},
        { "teacher2" : "ce" ,"firstname2" : "wang"}
    ]
}

在javascript中存在兩種json數(shù)據(jù)方式:
1.json字符串
2.json對象

其實json字符串用來進行數(shù)據(jù)傳輸(對象無法進行傳輸)虑瀑,json對象用來進行對內(nèi)容的表達輸出湿滓。
通過JSON.parse()函數(shù)可以把json字符串轉(zhuǎn)化為json對象,通過JSON.stringify()可以把json對象轉(zhuǎn)化為json字符串舌狗。下面我們來詳細介紹這兩個函數(shù)叽奥。

JSON.parse()
JSON.parse() 方法解析一個JSON字符串,構(gòu)造由字符串描述的JavaScript值或?qū)ο蟆?/p>

語法:JSON.parse(str[, fn]);

參數(shù):
str:要被解析的JSON字符串痛侍。
fn(可選):函數(shù)朝氓,可以在返回之前對解析的原始值進行改造。
首先 使用JSON.parse()恋日,不帶fn

//str為上面的json字符串
var obj = JSON.parse(str);
console.log(obj);
// {
//  name : "wgq",
//  age : "18",
//  arg : [
//      { teacher : "ce" ,firstname : "wang"},
//      { teacher2 : "ce" ,firstname2 : "wang"}
//  ]
// }

可以看到obj的屬性少了雙引號膀篮,它變成了json對象。
接下來使用fn :
fn(可選函數(shù))帶兩個參數(shù)k和v岂膳,k是鍵誓竿,v是值。
當解析字符串的每一個屬性時谈截,函數(shù)會按照解析的順序(從最里面的屬性開始筷屡,一級一級往外)分別調(diào)用fn函數(shù)(即解析一個屬性調(diào)用一次fn函數(shù))涧偷。

//str為上面的json字符串
var obj = JSON.parse(str,function(k,v){
    if( k === "name"){
        v = "123";
    }
    return v;
});
console.log(obj);
// {
//  name : "123",
//  age : "18",
//  arg : [
//      { teacher : "ce" ,firstname : "wang"},
//      { teacher2 : "ce" ,firstname2 : "wang"}
//  ]
// }

上面代碼寫到毙死,當遍歷到屬性name時燎潮,把name的值變?yōu)椤?23”。
函數(shù)解析順序:

JSON.parse(str扼倘,function(k,v){
    conlose.log(k);
    return v;
});
// name
// age
// teacher
// teacher2
// arg
// " "

由此可以看出确封,解析式從最最里層的屬性開始,一級級往外再菊,最終到達頂層爪喘。

fn的小知識點:
當遍歷到最頂層時,k的值為空字符串纠拔。
如果返回undefined秉剑,則當前屬性會從所屬對象中刪除。

JSON.stringify()
JSON.stringify() 方法將一個JSON對象轉(zhuǎn)換為一個JSON字符串

語法:JSON.stringify(str [,fn[, space]])

參數(shù):
str : 要被解析的json對象稠诲。
fn(可選) : 函數(shù)或者數(shù)組侦鹏,在序列化的過程中,被序列化的屬性都過經(jīng)過該函數(shù)的轉(zhuǎn)化和處理臀叙。如果第二個參數(shù)為數(shù)組略水,則序列化的json字符串只保留數(shù)組中的屬性名。如果該參數(shù)為null或者未聲明劝萤,則所有屬性都會被序列化聚请。
spance(可選) : 指定縮進,可以是數(shù)字或者字符串稳其。數(shù)字最高為10,字符串也最高取10個炸卑。

首先使用JSON.stringify()

//obj為上面的json對象
var jsonstr = JSON.parse(obj);
console.log(jsonstr);
// {
//  "name" : "wgq",
//  "age" : "18",
//  "arg" : [
//      { "teacher" : "ce" ,"firstname" : "wang"},
//      { "teacher2" : "ce" ,"firstname2" : "wang"}
//  ]
// }

這里可以看到既鞠,本來為json對象的obj又重新變回了json字符串。

使用fn
fn的函數(shù)使用跟JSON.parse()差不多盖文,可以參考上面所寫內(nèi)容嘱蛋。
如果fn為數(shù)組:
數(shù)組的值代表json序列化字符串的屬性名。

//obj為上面的json對象
var jsonstr = JSON.parse(obj五续,["name","age"]);
console.log(jsonstr);
// {
//  "name" : "wgq",
//  "age" : "18",
// }

上面代碼可以看到洒敏,只有在數(shù)組中出現(xiàn)的值就是json字符串中出現(xiàn)的屬性名。

使用space參數(shù):
space 參數(shù)用來控制結(jié)果字符串里面的間距疙驾。如果是一個數(shù)字, 則在字符串化時每一級別會比上一級別縮進多這個數(shù)字值的空格(最多10個空格)凶伙;如果是一個字符串,則每一級別會比上一級別多縮進用該字符串(或該字符串的前十個字符)它碎。

var obj ={
    name : "wgq"
}
var str = JSON.stringify(obj)
console.log(str)// {"name":"wgq"}
var str2 = JSON.stringify(obj,null," ");
console.log(str2) 
//{
//  "name":"wgq"
//}

序列化注意事項:
1.非數(shù)組對象的屬性不能保證以特定的順序出現(xiàn)在序列化后的字符串中(即序列號后函荣,順序會亂)
2.布爾值显押、數(shù)字、字符串的包裝對象在序列化過程中會自動轉(zhuǎn)換成對應(yīng)的原始值傻挂。
3.undefined乘碑、任意的函數(shù)以及 symbol 值,在序列化過程中會被忽略(出現(xiàn)在非數(shù)組對象的屬性值中時)或者被轉(zhuǎn)換成 null(出現(xiàn)在數(shù)組中時)金拒。
4.所有以 symbol 為屬性鍵的屬性都會被完全忽略掉兽肤,即便 replacer 參數(shù)中強制指定包含了它們。
5.不可枚舉的屬性會被忽略绪抛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末资铡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子睦疫,更是在濱河造成了極大的恐慌害驹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤育,死亡現(xiàn)場離奇詭異宛官,居然都是意外死亡,警方通過查閱死者的電腦和手機瓦糕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門底洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咕娄,你說我怎么就攤上這事亥揖。” “怎么了圣勒?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵费变,是天一觀的道長。 經(jīng)常有香客問我圣贸,道長挚歧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任吁峻,我火速辦了婚禮滑负,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘用含。我一直安慰自己矮慕,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布啄骇。 她就那樣靜靜地躺著痴鳄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肠缔。 梳的紋絲不亂的頭發(fā)上夏跷,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天哼转,我揣著相機與錄音,去河邊找鬼槽华。 笑死壹蔓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的猫态。 我是一名探鬼主播佣蓉,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亲雪!你這毒婦竟也來了勇凭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤义辕,失蹤者是張志新(化名)和其女友劉穎虾标,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灌砖,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡璧函,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了基显。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸吓。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撩幽,靈堂內(nèi)的尸體忽然破棺而出库继,到底是詐尸還是另有隱情,我是刑警寧澤窜醉,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布宪萄,位于F島的核電站,受9級特大地震影響榨惰,放射性物質(zhì)發(fā)生泄漏雨膨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一读串、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撒妈,春花似錦恢暖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棋蚌,卻和暖如春嫁佳,著一層夾襖步出監(jiān)牢的瞬間挨队,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工蒿往, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盛垦,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓瓤漏,卻偏偏與公主長得像腾夯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔬充,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自 https://itbilu.com/javascript/js/Vkmh3oeOg.html JSON...
    JasonNull閱讀 464評論 0 1
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,212評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蝶俱,服務(wù)發(fā)現(xiàn),斷路器饥漫,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • -1- 前天傍晚下班路上庸队,同事跟我聊了一件奇葩事积蜻。他在之前的公司就職時,部門曾經(jīng)招了一位清華的研究生皿哨,開始大家對這...
    文科升閱讀 3,340評論 31 114
  • 1.這一天沒有夜晚沒有灰蒙蒙的遠方?jīng)]有失眠的星星和無措的人每個人都是一團光用一個早晨抽新吐綠一個中午飽食酣睡剩下的...
    訥言不敏閱讀 232評論 1 9