JS操作JSON詳細總結

來源:互聯網
上載者:User

JS操作JSON詳細總結

  本篇文章主要是對JS操作JSON進行了總結介紹,需要的朋友可以過來參考下,希望對大家有所協助

  在JS中將JSON的字串解析成JSON資料格式,一般有兩種方式:

  1.一種為使用eval_r()函數。

  2. 使用Function對象來進行返回解析。

  在資料轉送流程中,json是以文本,即字串的形式傳遞的,而JS操作的是JSON對象,所以,JSON對象和JSON字串之間的相互轉換是關鍵。例如:

  JSON字串:

  var str1 = '{ "name": "cxh", "sex": "man" }';

  JSON對象:

  var str2 = { "name": "cxh", "sex": "man" };

  第一種解決方案:

  var dataObj=eval_r("("+data+")");//轉換為json對象

  為什麼要 eval這裡要添加 “("("+data+")");//”呢?

  原因在於:eval本身的問題。由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種運算式。

  加上圓括弧的目的是迫使eval函數在處理JavaScript代碼的時候強制將括弧內的運算式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括弧,那麼eval會將大括弧識別為JavaScript代碼塊的開始和結束標記,那麼{}將會被認為是執行了一句空語句。所以下面兩個執行結果是不同的:

  alert(eval_r("{}"); // return undefined

  alert(eval_r("({})");// return object[Object]

  對於這種寫法,在JS中,可以到處看到。

  如: (function()) {}(); 做閉包操作時等。

  var str1 = '{ "name": "cxh", "sex": "man" }';

  var data=eval_r("("+str1+")");//轉換為json對象//data =(new

  alert (data.name);//會顯示出cxh

  這裡特別需要注意的是方式1中的eval_r()方法是動態執行其中字串(可能是js指令碼)的,這樣很容易會造成系統的安全問題。所以可以採用一些規避了eval_r()的第三方用戶端指令碼庫,比如JSON in JavaScript就提供了一個不超過3k的指令碼庫。

  第二種解決方案:

  第二種解析方式就是使用Function對象來完成,它的典型應用就是在JQUERY中的AJAX方法下的success等對於返回資料data的解析

  var str1 = '{ "name": "cxh", "sex": "man" }';

  var data = (Function("","return "+str1))();

  alert (data.name);//會顯示出cxh

  詳細出處參考:http://www.jb51.net/article/47401.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.