Javascript 安全地将JSON字符串转换为对象
给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象 显然,我可以通过以下方式不安全地做到这一点:Javascript 安全地将JSON字符串转换为对象,javascript,json,parsing,Javascript,Json,Parsing,给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象 显然,我可以通过以下方式不安全地做到这一点: var obj = eval("(" + json + ')'); 但这使我容易受到包含其他代码的JSON字符串的攻击,简单地求值似乎是非常危险的。我不确定是否有其他方法可以做到这一点,但这里介绍了如何使用 当参数为true时调用evalJSON()可以清除传入字符串。这个答案适用于IE
var obj = eval("(" + json + ')');
但这使我容易受到包含其他代码的JSON字符串的攻击,简单地求值似乎是非常危险的。我不确定是否有其他方法可以做到这一点,但这里介绍了如何使用 当参数为true时调用
evalJSON()
可以清除传入字符串。这个答案适用于IE<7,对于现代浏览器,请查看上面Jonathan的答案
这个答案已经过时,(JSON.parse(jsonString)
)现在是最好的答案
有多种语言的JSON解析器,包括四种不同的JavaScript解析器。我相信大多数人都会考虑他们的GOTO实现。 如果你正在使用,你也可以使用:
$.getJSON(url, function(data) { });
然后你可以做像这样的事情
data.key1.something
data.key1.something_else
等等
回调传递返回的数据,该数据将是JSON结构定义的JavaScript对象或数组,并使用
$.parseJSON()
方法进行解析。现在不推荐使用jQuery方法。请改用此方法:
let jsonObject = JSON.parse(jsonString);
使用不推荐的jQuery功能的原始答案: 如果使用jQuery,只需使用:
jQuery.parseJSON( jsonString );
这正是您想要的(请参阅jQuery)。是一种纯JavaScript方法,只要您能够保证一个合理的现代浏览器。这似乎是一个问题: 通过AJAXWebSocket等接收的输入,它将是字符串格式,但您需要知道它是否为
JSON.parsable
。问题是,如果您总是通过JSON.parse
运行它,程序可能会“成功”继续运行,但您仍然会看到控制台中抛出一个错误,错误是可怕的“error:unexpected token'x'
使用“”中的简单代码示例: 并将其逆转:
var str = JSON.stringify(arr);
请尝试将该方法用于此数据对象。例如:
Data='{result:true,count:1}
'
try {
eval('var obj=' + Data);
console.log(obj.count);
}
catch(e) {
console.log(e.message);
}
当您使用串行端口编程时,这种方法在Nodejs中确实很有帮助。为了好玩,这里有一种使用函数的方法:
jsonObject = (new Function('return ' + jsonFormatData))()
我找到了一个“更好”的方法:
在咖啡脚本中:
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
可能是最好的方法
这里有一个例子
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);
使用
parse()
方法的最简单方法:
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
然后可以获取JSON元素的值,例如:
var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;
按照文档中的说明使用:
JSON.parse(jsonString);
JSON.parse()
将传递到函数中的任何JSON字符串转换为JSON对象
要更好地理解它,请按F12在浏览器中打开“Inspect Element”,然后转到控制台编写以下命令:
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));
console.log(obj.result);
您将以对象{result:true,count:1}
的形式获得输出
为了使用该对象,您可以将其分配给变量,可能是obj
:
var obj = JSON.parse(response);
通过使用obj
和点(
)操作符,您可以访问JSON对象的属性
尝试运行以下命令:
console.log(JSON.parse(response));
console.log(obj.result);
json.parse将变成object。json解析总是一件痛苦的事。如果输入不符合预期,则会抛出错误并使您正在执行的操作崩溃 您可以使用以下微型函数安全地解析输入。即使输入无效或已经是一个对象,它也始终会打开一个对象,这在大多数情况下是更好的:
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 || {};
}
};
将对象转换为JSON,然后对其进行解析,对我来说很有用,比如:
JSON.parse(JSON.stringify(object))
您还可以使用
revivier
功能进行过滤
var data = JSON.parse(jsonString, function reviver(key, value) {
//your code here to filter
});
有关更多信息,请阅读。官方文档:
JSON.parse()
方法解析JSON字符串,构造字符串所描述的JavaScript值或对象。可以提供一个可选的恢复器
函数,在返回结果对象之前对其执行转换
语法:
JSON.parse(text[, reviver])
参数:
JSON.parse(text[, reviver])
text
:要解析为JSON的字符串。有关JSON语法的描述,请参见JSON对象
恢复器(可选)
:如果是函数,则说明在返回之前如何转换最初通过解析生成的值
返回值
与给定JSON文本对应的对象
例外情况
如果要分析的字符串不是有效的JSON,则引发SyntaxError异常。我知道以前的问题,但是使用返回数据的匿名函数
new Function()
,没有人注意到这个解决方案
举个例子:
var oData = 'test1:"This is my object",test2:"This is my object"';
if( typeof oData !== 'object' )
try {
oData = (new Function('return {'+oData+'};'))();
}
catch(e) { oData=false; }
if( typeof oData !== 'object' )
{ alert( 'Error in code' ); }
else {
alert( oData.test1 );
alert( oData.test2 );
}
这更安全一些,因为它在函数内部执行,而不直接在代码中编译。因此,如果其中有函数声明,它将不会绑定到默认窗口对象
我使用它来简单快速地“编译”DOM元素的配置设置(例如数据属性) 试试这个。这个是用打字机写的
export function safeJsonParse(str: string) {
try {
return JSON.parse(str);
} catch (e) {
return str;
}
}
使用
JSON.Parse()
解析JSON字符串,数据将成为JavaScript对象:
JSON.parse(jsonString)
这里,JSON表示处理JSON数据集
假设我们从web服务器收到以下文本:
'{ "name":"John", "age":30, "city":"New York"}'
要解析为JSON对象,请执行以下操作:
var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)
这里的obj
是相应的JSON对象,看起来像:
{ "name":"John", "age":30, "city":"New York"}
要获取值,请使用
运算符:
obj.name // John
obj.age //30
使用JSON.stringify()
将JavaScript对象转换为字符串摘要:
Javascript(浏览器和NodeJS)有一个内置的JSON
对象。在这个对象上有两种方便的方法来处理JSON
。它们是:
JSON.parse()
将JSON
作为参数,返回JS对象JSON.stringify()
将JS对象作为参数返回JSON
objectJSONobj.name // John
obj.age //30
"{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)
// instead of last JSON.parse:
var { status, token } = JSON.parse(jsonString);
status = 1 and token = 65b4352b2dfc4957a09add0ce5714059
var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
var myArr = JSON.parse(this.responseText);
console.log(myArr[0]);
var text = '{ "name":"John", "birth":"1986-12-14", "city":"New York"}';
var obj = JSON.parse(text);
obj.birth = new Date(obj.birth);
var text = '{ "name":"John", "age":"function () {return 30;}", "city":"New York"}';
var obj = JSON.parse(text);
obj.age = eval("(" + obj.age + ")");