安全地将JSONstring转换为对象

给定一串JSON数据,你怎么能安全地把这个string转换成一个JavaScript对象?

显然你可以用这样的东西不安全地做…

var obj = eval("(" + json + ')'); 

…但是这让我们容易受到包含其他代码的jsonstring的影响,这对于简单的eval来说似乎非常危险。

 JSON.parse(jsonString); 

只要你需要一个合理的现代浏览器,就是一种纯粹的JavaScript方法。

另见https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

jQuery方法现在已经被弃用了。 改用这个方法:

 let jsonObject = JSON.parse(jsonString); 

使用弃用的jQueryfunction的原始答案

如果你使用jQuery只是使用:

 jQuery.parseJSON( jsonString ); 

这正是你正在寻找(请参阅jQuery 文档 )。

编辑:这个答案已经过时了, 乔纳森的上面的答案 ( JSON.parse(jsonString) )现在是最好的答案。

JSON.org有许多语言的JSONparsing器,其中包括4种不同的语言。 我相信大多数人会考虑json2.js他们的执行。

使用简单的代码在MSDN上的以下链接中表示。

 var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}'; var contact = JSON.parse(jsontext); 

并相反

 var str = JSON.stringify(arr); 

我不确定其他的方法来做到这一点,但这是你如何在Prototype(JSON教程)中做到这一点。

 new Ajax.Request('/some_url', { method:'get', requestHeaders: {Accept: 'application/json'}, onSuccess: function(transport){ var json = transport.responseText.evalJSON(true); } }); 

使用true作为参数调用evalJSON()来清理传入的string。

这似乎是问题:

通过ajax websocket等接收一个input,它总是以string格式 – 但是你需要知道它是否是JSON.parsable。 Touble是,如果你总是通过JSON.parse运行它,那么程序可以继续'成功',但是你仍然会在控制台中看到一个错误,带着令人畏惧的“Error:unexpected token'x'”。

 var data; try { data = JSON.parse(jqxhr.responseText); } catch (_error) {} data || (data = { message: 'Server error, please retry' }); 

如果你使用jQuery,你也可以做$.getJSON(url, function(data) { });

然后你可以做些事情,如data.key1.somethingdata.key1.something_else

 $.ajax({ url: url, dataType: 'json', data: data, success: callback }); 

该callback将传递返回的数据,该数据将是JSON结构定义的JavaScript对象或数组,并使用$.parseJSON()方法进行分析。

只是为了好玩,这里是使用函数的方式:

  jsonObject = (new Function('return ' + jsonFormatData))() 

如果你想这个方法可以用这种方式。这里你想要的数据对象:数据='{结果:真,计数:1}'

 try { eval('var obj=' + Data); console.log(obj.count); } catch(e) { console.log(e.message); } 

这个方法真的有助于Nodejs如果你正在使用串口编程

使用parse()方法的最简单的方法是:

 var response = '{"result":true,"count":1}'; var JsonObject= JSON.parse(response); 

那么你可以得到Json元素的值,例如:

 var myResponseResult = JsonObject.result; var myResponseCount = JsonObject.count; 

按照文档中的描述使用jQuery :

 JSON.parse(jsonString); 

我已经成功地使用json_sans_eval一段时间了。 据作者说,它比json2.js更安全。

使用JSON.parse可能是最好的方法。 这里是一个现场演示的例子

 var jsonRes = '{ "students" : [' + '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' + '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' + '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}'; var studentObject = JSON.parse(jsonRes); 

我发现了一个“更好”的方法:

在CoffeeScript中:

 try data = JSON.parse(jqxhr.responseText) data ||= { message: 'Server error, please retry' } 

在Javascript中:

 var data; try { data = JSON.parse(jqxhr.responseText); } catch (_error) {} data || (data = { message: 'Server error, please retry' }); 

JSON.parse()将传递给函数的任何JSONstring转换为JSON对象。

为了更好的理解,按F12打开浏览器的检查元素,然后去控制台写下列命令:

 var response = '{"result":true,"count":1}'; //sample json object(string form) JSON.parse(response); //converts passed string to JSON Object. 

现在运行命令: –

 console.log(JSON.parse(response)); 

你会得到输出作为对象{结果:真,计数:1}。

为了使用该对象,你可以把它分配给variables让我们说obj: –

 var obj = JSON.parse(response); 

现在通过使用obj和dot(。)运算符,您可以访问JSON对象的属性。

尝试运行该命令

 console.log(obj.result); 
 JSON.parse(jsonString); 

json.parse将变成对象。

JSONparsing总是痛苦的屁股。 如果input不符合预期,则会引发错误并使您正在执行的操作崩溃。 您可以使用下面的小函数来安全地parsinginput。 即使input无效或者已经是大多数情况下更好的对象,它总是会变成一个对象。

 JSON.safeParse = function (input, def) { // Convert null to empty object if (!input) { return def || {}; } else if (Object.prototype.toString.call(input) === '[object Object]') { return input; } try { return JSON.parse(input); } catch (e) { return def || {}; } }; 

JS Guru Douglas Crockford写了一个parseJSON函数,你在这里下载

将对象转换为JSON,然后parsing它,对我有用,例如:

 JSON.parse(JSON.stringify(object) 

你也可以使用reviver函数来过滤。

 var data = JSON.parse(jsonString, function reviver(key, value) { //your code here to filter }); 

有关更多信息,请阅读JSON.parse