簡體   English   中英

如何將JSON字符串轉換為對象?

[英]How to convert a JSON string to an object?

如何在JavaScript中將JSON字符串轉換為對象? 有沒有一種方法可以做到這一點?

就像是:

var x = "{  id: 5, name: 'hello'  }";
var y = /*something*/(x);

alert(y.id + " " + y.name);

根據評論和問題歷史記錄,您似乎已經在使用jQuery了。 在這種情況下,很高興知道jQuery附帶了一個新的parseJSON()函數,因為版本1.4.1是在今年1月下旬發布的。 如果您尚未達到1.4.1,請考慮升級。 以下是其API文檔的相關摘錄:

描述 :采用格式良好的JSON字符串並返回生成的JavaScript對象

添加了jQuery.parseJSON(json)版本: 1.4.1

json要解析的JSON字符串。

傳入格式錯誤的JSON字符串將導致拋出異常。 例如,以下是所有格式錯誤的JSON字符串:

  • {test: 1} (測試周圍沒有雙引號)。
  • {'test': 1} ('test'使用單引號而不是雙引號)。

此外,如果您傳入任何內容,空字符串,null或未定義,將從parseJSON返回'null'。 在瀏覽器提供JSON.parse的本機實現的地方,jQuery使用它來解析字符串。 有關JSON格式的詳細信息,請參閱http://json.org/

例:

解析JSON字符串。

 var obj = jQuery.parseJSON('{"name":"John"}'); alert( obj.name === "John" ); 

使用json2 lib: http//www.json.org/js.html

布魯諾,

這是jquery方法,正如您將看到的,它使用自我相同的新函數(“return ..”)業務。

parseJSON: function (a) {
    if (typeof a !== "string" || !a) return null;
    if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
        .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) 
        return z.JSON && z.JSON.parse ? z.JSON.parse(a) : (new Function("return " + a))();
    else c.error("Invalid JSON: " + a)
}

[編輯]正則表達式當然是“處理”json字符串中嵌入的任何流氓字符。

幽靈般的:)

本段完全涵蓋了本機JSON實現以及使用本機JSON實現的庫: http//en.wikipedia.org/wiki/JSON#Native_JSON

使用本機JSON實現比使用某些javascript庫執行相同任務要快得多/更安全。 但是,如果某些庫聲稱它會盡可能嘗試使用本機實現 - 直接使用本機JSON(兼容性和東西)是更好的選擇。

JSON.org網站提供了最簡單的解決方案:

var y = eval('(' + x + ')');

更多信息

編輯:哦。 對。 當且僅當您確定可以信任源以生成正確的JSON對象時, eval解決方案才是好的。 否則,您將不得不使用JSON解析器 - 查看其他回復。

你還可以做以下比eval更邪惡:):

var x = '{  "id": 5, "name": "hello"  }';

var y = new Function("return " + x)();
alert(y.id + " " + y.name);

如其他人所說,如果你正在使用jquery,那就選擇內置的parseJson方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM