1. 程式人生 > >Js中把JSON字串轉換為JSON物件(eval()、new Function())

Js中把JSON字串轉換為JSON物件(eval()、new Function())

在我們利用js操作json資料時一般會用到eval進行資料轉換了,但有些朋友還喜歡使用function來轉換,下面我就給大家總結一下具體例子。

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

1.一種為使用eval()函式。

2. 使用Function物件來進行返回解析。

 第一種解析方式:使用eval函式來解析,並且使用jQuery的each方法來遍歷

用jQuery解析JSON資料的方法,作為jQuery非同步請求的傳輸物件,jQuery請求後返回的結果是json物件,這裡考慮的都是伺服器返回JSON形式的字串的形式,對於利用JSONObject等外掛封裝的JSON物件,與此亦是大同小異,這裡不再做說明。
這裡首先給出JSON字串集,字串集如下:

 程式碼如下 複製程式碼

var data = " {
root:
    [
        {name: '1', value: '0'},
        {name: '6101', value: '北京市'},
        {name: '6102', value: '天津市'},
        {name: '6103', value: '上海市'},
        {name: '6104', value: '重慶市'},
        {name: '6105', value: '渭南市'},
        {name: '6106', value: '延安市'},
        {name: '6107', value: '漢中市'},
        {name: '6108', value: '榆林市'},
        {name: '6109', value: '安康市'},
        {name: '6110', value: '商洛市'}
    ]
}
";

這裡以jQuery非同步獲取的資料型別——json物件和字串為依據,分別介紹兩種方式獲取到的結果處理方式。

1、對於伺服器返回的JSON字串,如果jQuery非同步請求沒做型別說明,或者以字串方式接受,那麼需要做一次物件化處理,方式不是太麻煩,就是將該字串放於eval()中執行一次。這種方式也適合以普通JavaScipt方式獲取json物件,以下舉例說明:

 程式碼如下 複製程式碼
var dataObj = eval("(" + data + ")");  // 轉換為json物件

為什麼要 eval這裡要新增 “("(" + data + ")");” 呢?

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

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

 程式碼如下 複製程式碼

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


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

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

 程式碼如下 複製程式碼

alert(dataObj.root.length);//輸出root的子物件數量
$.each(dataObj.root, fucntion(idx, item) {
 if (idx == 0) {
  return true;
 }

 //輸出每個root子物件的名稱和值
 alert("name:" + item.name + ",value:" + item.value);
})

2、對於伺服器返回的JSON字串,如果jQuery非同步請求將type(一般為這個配置屬性)設為“json”,或者利用$.getJSON()方法獲得伺服器返回,那麼就不需要eval()方法了,因為這時候得到的結果已經是json物件了,只需直接呼叫該物件即可,這裡以$.getJSON方法為例說明資料處理方法:

 程式碼如下 複製程式碼
$.getJSON("http://www.111cn.net/", {param: "snsgou"}, function (data) {
 // 此處返回的data已經是json物件
 // 以下其他操作同第一種情況
 $.each(data.root, function (index, item) {
  if (index == 0) {
   return true; // 同countinue,返回false同break
  }
  alert("name:" + item.name + ",value:" + item.value);
 });
});

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

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

 程式碼如下 複製程式碼

var json='{"name":"CJ","age":18}';

data =(new Function("", "return " + json))();

此時的data就是一個會解析成一個 json物件了

相關推薦

JsJSON字串轉換JSON物件(eval()new Function())

在我們利用js操作json資料時一般會用到eval進行資料轉換了,但有些朋友還喜歡使用function來轉換,下面我就給大家總結一下具體例子。 在JS中將JSON的字串解析成JSON資料格式,一般有兩種方式: 1.一種為使用eval()函式。 2. 使用Function物

jsjson字串轉換json物件的方法解析(簡單處理JSON語法格式校驗問題)

js 將json字串轉換為json物件的方法解析 將json字串轉換為json物件的方法。在資料傳輸過程中,json是以文字,即字串的形式傳遞的,而JS操作的是JSON物件,所以,JSON物件和JSON字串之間的相互轉換是關鍵 例如: JSON字串: var str1 = ‘{

js-json字串轉換json物件

來源:http://www.jb51.net/article/43136.htm 將json字串轉換為json物件的方法。在資料傳輸過程中,json是以文字,即字串的形式傳遞的,而JS操作的是JSON物件,所以,JSON物件和JSON字串之間的相互轉換是關鍵 例如:

Android開發-進階:Json字串轉換java物件的各種實現方法[json_lib框架Gsonorg.json]

JSON (JavaScript Object Notation) 是一種輕量級的資料交換格式。易於人閱讀和編寫。同時也易於機器解析和生成。它基於JavaScript Programming Language, Standard ECMA-262 3rd Edition

json字串轉換json物件

一般處理伺服器傳來的json值時,我們都會用兩種方式進行處理: 1.一種為使用eval()函式。var dataObj=eval("("+data+")");//轉換為json物件(注:data為json資料); 2. 使用Function物件來進行返回解析。var js

前臺JSON字串轉換JSON物件

開發中我們常常會使用到JSON物件,那麼我們在前臺怎樣將一個JSON字串轉換為JSON物件呢。 在這裡我提供了兩種方法,當然這兩種方法網上都是已經有的,我也只是整理一下更方便各位檢視而已。 <!DOCTYPE html PUBLIC "-//W3C//DTD HT

Json字串轉換JS物件方法

                一般JSON字串轉換為JS物件,都使用var jsonStr="{a:1}";var jsonObj = eval("("+jsonStr+")");今天學習JQuery原始碼看到一下方法,原來還可以這樣解析JSON字串:  parseJSON: function( data

JS字串轉換JSON的四種方法筆記

1、jQuery外掛支援的轉換方式: 示例: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字串轉換成json物件 2、瀏覽器支援的轉換方式(Firefox,chrome,opera,safari,ie)

java將JSON字串轉換實體類物件,基於net sf json實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

做一次面向物件的體操:將JSON字串轉換巢狀物件的一種方法

能不能把這個JSON串轉成相應的物件,更易於使用呢? 為了方便講解,這裡重複寫下JSON串。 { “item:s_id:18006666”: “1024”, “item:s_id:18008888”: “1024”, “item:g_id:1800

json.loads()將字串轉換json格式出錯

今天爬取今日頭條的街拍時,需要將裡面的一個字串變為json格式,結果直接轉換就出現了 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

字串轉換JSON物件,資料精度丟失

字串轉換為JSON物件,資料精度丟失 今天在專案開發中發現了資料提交後臺處理後,精度改變問題。在一陣除錯後,發現是JSON轉換出了問題。需求是匯入一個excel表格,然後顯示內容,最後存到資料庫中。讀入表格時內容顯示:![正確資料](https://img-blog.csdn.net/20

JSON字串轉換Map

本文是利用阿里巴巴封裝的FastJSON來轉換json字串的。例子如下: package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONO

將資料庫查詢的結果轉換json

呼叫介面,無非也就是開啟連結 讀取流 將結果以流的形式輸出將查詢結果以json返回,無非就是將查詢到的結果轉換成jsonObject=============================================================/*** * 將從資料中取到的結果以json的

json格式資料,將資料庫查詢的結果轉換json, 然後呼叫介面的方式返回json(方式一)

呼叫介面,無非也就是開啟連結 讀取流 將結果以流的形式輸出 將查詢結果以json返回,無非就是將查詢到的結果轉換成jsonObject ============================================================= /***     * 將從資料中取到的結果以jso

python:linux下字串轉換JSON

JSON是一種輕量級的資料交換格式,易於人類閱讀和編寫,同時也易於機器解析和生成。由於JSON的諸多優點,已經廣泛使用在各個系統中,因此,我們經常會有將JSON字串轉換為JSON物件的需求。 例如,在筆者的工作過程中,我們的系統會呼叫底層服務的API,底層服務的API一般都是以JSON的格式返回,為

JS定義List然後轉換json交給後臺處理

=================定義List方法====================== function List(){     this.value = [];          /*新增*/     this.add = function(obj){      

php使用json_encode()無法將json字串轉換陣列.轉換的結果的null

要是使用json_decode()  字串的格式要如下: [ { "a": "hello", "b" : "world" } ]; 如果使用json_decode得到是null ,那麼很可能是 鍵名 沒有加引號 導致 ,要想上面的例子 鍵名a 有加引號這樣才能成功 的轉

如何表單轉換Json:

  引入json2.js,官網http://www.json.org,為了相容ie6、ie7、ie8、ie9支援javascript的JSON物件了   使用javascript中的JSON物件進行轉換:   把表單轉換為請求url:  var w= $("form").

json字串轉換JSONObject和JSONArray .

一.下載json 具體到http://www.json.org/上找java-json下載,並把其放到專案原始碼中,這樣就可以引用其類物件了 二.具體轉化過程 //JSONObject  String jsonMessage = "{\"語文\":\"88\",\"數學\":\"78\",\"計算機\":\