JSON字符串僅僅只是一個字符串,一個總體,不截取的話沒辦法取出其中存儲的數據,不能直接使用,除非你只想alert()他;javascript
JSON對象:
var str2 = { 「name」: 「ywx」, 「sex」: 「man」 };java
JSON字符串:
var str1 = ‘{ 「name」: 「ywx」, 「sex」: 「man」 }’;ajax
讀取JSON對象的方法
var str2 = { 「name」: 「ywx」, 「sex」: 「man」 };
就能夠這樣讀取:alert(str2.name); //彈出」ywx」。express
咱們遇到的JSON不多有這麼簡單的,好比複雜一點的JSON對象如:
var str={「GetUserPostByIdResult」:{「Age」:」26」,」ID」:」2server」,」Name」:」ywx」}};
alert(str.GetUserPostByIdResult.Name); //彈出ywx;json
JSON字符串轉換爲JSON對象
在數據傳輸流程中,json是以文本,即字符串的形式傳遞的,而JS操做的是JSON對象,因此,JSON對象和JSON字符串之間的相互轉換是關鍵。例如:
JSON字符串: var str1 = ‘{ 「name」: 「ywx」, 「sex」: 「man」 }’;
JSON對象: var str2 = { 「name」: 「ywx」, 「sex」: 「man」 };
要運用上面的str1,須運用下面的方法轉化爲JSON對象(這一點在ajax返回的時候,常常遇到!):
//由JSON字符串轉換爲JSON對象
var obj = eval(‘(’ + str1+ ‘)’);
或者
var obj = str.parseJSON(); //由JSON字符串轉換爲JSON對象
或者
var obj = JSON.parse(str); //由JSON字符串轉換爲JSON對象
而後,就能夠這樣讀取:Alert(obj.name); Alert(obj.sex);
特別注意:若是obj原本就是一個JSON對象,那麼運用 eval()函數轉換後(哪怕是屢次轉換)仍是JSON對象,可是運用 parseJSON()函數處理後會有疑問(拋出語法異常)。
**問:**var obj=eval(「(「+str1+」)」);//轉換爲json對象 ,爲何要 eval這裏要添加 「(「(「+data+」)」);//」呢?
答:緣由在於:eval自己的問題。 因爲json是以」{}」的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,因此必須強制性的將它轉換成一種表達式。
加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化爲對象,而不是做爲語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那麼eval會將大括號識別爲JavaScript代碼塊的開始和結束標記,那麼{}將會被認爲是執行了一句空語句。因此下面兩個執行結果是不一樣的:
alert(eval(「{}」); // return undefined
alert(eval(「({})」);// return object[Object]markdown
JSON對象轉化爲JSON字符串
例如:var str1=obj.toJSONString(); //將JSON對象轉化爲JSON字符
或者var str1=JSON.stringify(obj); //將JSON對象轉化爲JSON字符
alert(str1);
上面的多個方法中,除了eval()函數是js自帶的以外,其餘的多個要領都來自json.js包。新版本的 JSON 修改了 API,將 JSON.stringify() 和 JSON.parse() 兩個要領都注入到了 Javascript 的內建對象裏面,前者變成Object.toJSONString(),然後者變成了 String.parseJSON()。若是提示找不到toJSONString()和parseJSON()方法,則說明您的json包版本過低。網絡
上面是對javascript的簡單總結,部分總結參考網絡。可是不少在平時都用的到,特別是json字符轉對象的操做!這點是很是重要的!函數
來源:http://m.blog.csdn.net/article/details?id=51660784.net