javascript
JSON的使用・小结
JSON--JavaScript Object Notation (JavaScript對象表示法)
初始JSON的人很容易弄混對象與JSON(我也是剛剛弄清楚 ⊙﹏⊙)。
JSON是一種數據格式,經常有人說什么"把數據變成JSON對象然后@#¥……@¥"。
對象不一定是JSON格式,而JSON格式的數據(以下簡稱JSON數據)則一定是對象(簡單的數據,如1,"ABCD"都算是JSON格式,這里暫且忽略之)
JSON格式是以key-value的形式存放數據的 如:
這當中value可以是數字,字符串,數組,甚至null,但不能為undefined,function,對象實例和變量,否則該屬性會被無視掉。例:
var p = {"name":"Rose","family":undefined,"age":25,"sex":function(){} } JSON.stringify(p);//-->'{"name":"Rose","age":25}' //這里的JSON.stringify是EcmaScript5提供的,JSON是一個處理JSON數據的對象(IE8+ & 其他主流瀏覽器)。JSON對象有兩個方法parse()和stringify();
①JSON.parse(str)是將字符串str轉換成JSON數據.如
JSON.parse('{"name":"Ray","age":18}')-->{"name":"Ray","age":18}②JSON.stringify(json,arg2)將JSON數據序列化。
第一個參數json是JSON數據;
第二個參數是可選的,字符串數組或者函數。如果是數組的話則是只保留key值在數組中存在的屬性;函數的話,則可以對靈活的對value進行修改。例:
③小拓展
通過JSON對象實現對象的深復制(因為使用了JSON對象的stringify方法,所以是有局限性的,對象中不能包含函數和對象實例)
var a = {A:4}; var b = JSON.parse(JSON.stringify(a));?
字符串向JSON格式轉換的過程中,字符串里不能包含某些具有特殊含義的字符,否則會轉換失敗.例
var str = '{"name":"NothingGo\sRight"}'; JSON.parse(str);//這里會報錯。如果是用jQuery的Ajax獲取JSON的話,情況相同。blacklist整理入下:
\0,\b,\n,\f,\r,
\t,\v,\u,\v,\x
?
通過使用eval轉換JSON格式數據的問題
因為JSON對象在低版本瀏覽器的普及度低,我們在將序列化的數據向JSON格式轉換時沒有用JSON對象,而是用eval和Function(這里就不講它了)。
eval的使用方法
var str = '{"Name":"Ray"}'; var json = eval("(" + str + ")");這里的問題所在就是,初學者很容易就寫成如下格式
var json = eval(str);結果就報出了令人疑惑的錯誤:SyntaxError: Unexpected token :
疑惑是因為左看右看str都是正確的格式啊,而冒號也沒有問題。
其實真正的原因是使用者沒有了解eval的執行機制。
簡單的說eval就相當于直接把eval中的字符串當成javascript語句執行,再把返回值賦給前面的變量。
在js中括號括起來的部分會被強行變成表達式。即
var json = {"Name":"Ray"}
而大括號(最外層的)則被理解成包裹代碼塊的符號。也就是說只會執行大括號里面的內容。
這就成了 var json = "Name":"Ray";毫無疑問那個冒號會引起法錯誤。
?
轉載于:https://www.cnblogs.com/TiestoRay/archive/2012/11/15/2762536.html
總結
以上是生活随笔為你收集整理的JSON的使用・小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Binary Search O(log
- 下一篇: 面向接口编程详解(一)—— 思想基础