安全地将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