JSON字符串與JSON對象的區別,二者之間如何相互轉換?

 

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

相關文章
相關標籤/搜索