[英]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.