今天覆習了一下json寫一下我的心得:
1、首先需要明確的是,json是一種數據格式,而不是一種編程語言。
2、json可以表示三種類型的值:
- 簡單值:字符串,數字,布爾型,NULL(不支持undefined)
- 對象
- 數組
3、json中的字符串必須使用雙引號,使用單引號會出錯;對象中的屬性名也要使用雙引號
4、javascript和json的區別:
- json沒有生命變量(json中沒有變量的概念)
- json沒有末尾分號
5、json對象有兩個方法:stringify(),parse()
stringfy將javascript對象序列化為json字符串,而parse將json字符串解析為javascript對象
JSON.stringfy()可以接受三個參數,參數二可以是數組或者函數:
數組:
JSON.stringify(book,["title","edition"]);//過濾器,表示book中只保留,"title","edition"這兩個屬性
函數:
JSON.stringify(book,function(key,value){//過濾代碼});
第三個參數用於控制結果中的縮進和空白字符,最大縮進空格數為10
JSON.stringify(book,null,"--");
toJSON方法
當JSON.stringify()還是不能滿足某些對象進行自定義序列化要求時的需求
1 <!DOCTYPE html>
2 <html>
3 <head>
4 </head>
5 <body>
6 <script>
7 var book = {
8 title: "title",
9 toJSON:function(){
10 return "ToJSON";
11 }
12 };
13 alert(JSON.stringify(book));
14 </script>
15 </body>
16 </html>
顯示結果為ToJSON
序列化對象的順序如下:
- 如果存在toJSON方法,而且通過它可以取得有效值,則調用該方法,否則返回函數本身
- 如果提供了第二個參數,應用這個函數過濾器。傳入過濾器的值是第一步的返回值
- 對第二步返回的所有值進行序列化
- 如果提供了第三個參數,執行相應的格式化