1. 什麼是json格式?
json格式是現在**資料互動的標準資料格式,寫入標準。
2. 合格的json資料
1.物件
1)屬性名必須是雙引號的字串;不能是symbol型別;會被忽略
2)屬性值不能是date型別、函式、正規表示式、undefined、nan、infinity、-infinity
json.stringify(value)的作用是將值轉化為json的字串形式。
json.stringify();//""
//new date()由於tojson()方法的存在,由物件變成了字串型別,date.parse()無法復原json
json.stringify(); //
"{}" symbol的屬性被忽略
json.stringify(}); //
"{}" function的屬性值被忽略
json.stringify(); //
"{}" undefined的屬性值被忽略
json.stringify(); //
"}" 正規表示式被解析成{}
json.stringify(); //
"" nan被解析成null
json.stringify(); //
"" infinity被解析成null
json.stringify(); //
"" -infinity被解析成null
3)屬性值如果含有字串,必須全部是雙引號
var obj=}json.stringify(obj);
/*標準的json格式如下:
"}"
*/
4)物件不能迴圈引用,否則無法解析
let obj =let obj2 = ;
obj.c =obj2;
obj2.d =obj;
json.stringify(obj2);
//uncaught typeerror: converting circular structure to json
5) 合格的json格式資料最後乙個元素後面不能有,
json.stringify(); //"" 轉為json格式,逗號消失,說明json不能有逗號
2. 陣列
陣列的元素不能是date,symbol,regexp,function,nan,undefined,infinity,-infinity。
除了正規表示式會被解析成, 其餘6個都會被解析成null
最後乙個元素後面不能有逗號(,)
json.stringify([symbol(), undefined, nan, infinity,-infinity,function(){}, /a/]);//
"[null,null,null,null,null,null,{}]"
3. 原始資料型別
字串、數字(十進位制)、布林值、null
json.stringify('true');//""true"" 將字串單引號變為雙引號,再字串化
json.stringify('true') === "\"true\"" ;//
true
json.stringify(0x99); //
"153" 不能是十進位制以外的數字,會被自動轉為十進位制,通過json.parse()無法還原
json.stringify(99); //
"99"
json.stringify(true); //
"true"
json.stringify(null); //
"null"
❎不能是:symbol、undefined、nan、infinity、-infinity
前兩個會被忽略,和空函式一樣,預設返回undefined
後面的會被解析成null
json.stringify(symbol()); //undefined
json.stringify(undefined);//
undefined
json.stringify(nan); //
"null"
json.stringify(infinity); //
"null"
json.stringify(-infinity); //
"null"
該方法將任意型別的值,轉為json物件的字串格式。
1)如果物件有自定義的tojson方法,value將是tojson的返回值
date物件原生含有tojson()方法。將物件轉為字串,所以date物件不能作為json格式的值。
//自定義tojson()方法
var obj=
}};json.stringify(obj);
//""
2)當value是物件時,會過濾掉不可遍歷屬性
var obj ={};object.defineproperties(obj, ,
"bar":
});obj;
//""
3) 第二個引數可以是陣列,只有當value是物件時,表示可以遍歷的屬性;
起過濾作用! 可以過濾掉迴圈引用的屬性。
var obj =,bar: ,
tar: 7};
json.stringify(obj, ['foo']); //
"}" 因為第二個引數規定了只序列化foo屬性,巢狀的屬性也適用該規則
第二個引數還可以是函式function(key,value){},用於處理資料;而且可以遞迴處理所有的屬性。
該函式預設形式是:
funtion(key,value)
不論第乙個引數是什麼型別的值,函式第一次處理的key都沒有對應,value是本身;
如果返回的value值不是原始資料型別,則遞迴呼叫函式,函式對應的處理物件都是上次返回的結果。
a. 當value是物件時,key,value對應物件的鍵值對
json.stringify(, function(key,value) )
//""
//key= value=
//key= a value= 1
//key= b value= 2
json.stringify(, function
(key,value)
return
value;
});
//""
b. 當value是陣列時,key對應陣列下標, value對應值
json.stringify([1,2], function(key,value))
//"[1,2]"
//key= value= [1, 2]
//key= 0 value= 1
//key= 1 value= 2
c. 當value是原始型別的值時, 不需要遞迴呼叫
json.stringify(5, function(key,value)) //"10"
json.stringify('5', function(key,value)) //
"55"
4)第三個引數主要用來增加可讀性,調整返回格式;
如果引數是乙個數字(<10),表示在返回的屬性面前的空格數量;
json.stringify(}, function(key,value) , 4);/*"
}*/
如果引數是乙個字串(length<10), 表示在屬性前面新增該字串
json.stringify(}, function(key,value) , '|--');/*"
}"*/
json.parse(value)將json物件的字串形式,轉為json物件;
value必須是合格json資料的字串,否則會丟擲異常!
所以json.parse方法在不能確認引數是否正常的情況下,應該try...catch...
trycatch
//其實如果是('"test"')不會丟擲異常,字串包含的是json資料"test"
第二個引數的用法同json.stringify()的第二個引數是函式的用法。
Json資料格式
在web 系統開發中,經常會碰到客戶端和伺服器端互動的問題,比如說客戶端傳送乙個 ajax 請求,然後在伺服器端進行計算,計算後返回結果,客戶端接收到這個響應結果並對它進行處理。那麼這個結果以一種什麼資料結構返回,客戶端才能比較容易和較好的處理呢?通過幾個專案的實踐,我發現 json 格式的資料是一...
JSON資料格式
下面這段文字,摘錄自留作備忘 21世紀初,douglas crockford尋找一種簡便的資料交換格式,能夠在伺服器之間交換資料。當時通用的資料交換語言是xml,但是douglas crockford覺得xml的生成和解析都太麻煩,所以他提出了一種簡化格式,也就是json。json的規格非常簡單,只...
解析 JSON 格式資料
比起 xml,json的主要優勢在於它的體積更小,在網路上傳輸的時候可以更省流量。但缺點在於,它的語義性較差,看起來不如xml 直觀。我們還需要在c apache apache2 htdocs目錄中新建乙個 get data.json 的 檔案,然後編輯這個檔案,並加入如下 json 格式的內容 修...