安全地将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.something , data.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