[javascript] 安全地将JSON字符串转换为对象



9 Answers

jQuery方法现在已被弃用。 改用此方法:

let jsonObject = JSON.parse(jsonString);

使用弃用的jQuery功能的原始答案

如果你使用jQuery,只需使用:

jQuery.parseJSON( jsonString );

这正是你正在寻找的(请参阅jQuery documentation )。

Question

给定一串JSON数据,你怎样才能安全地将该字符串转换为JavaScript对象?

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

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

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




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

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

并相反

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如果你正在使用串口编程




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




您也可以使用reviver函数进行过滤。

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

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




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

在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()方法分析JSON字符串,构造由字符串描述的JavaScript值或对象。 可以提供可选的reviver函数,以便在返回结果对象之前执行转换。

句法

JSON.parse(text[, reviver])

参数

文本

要解析为JSON的字符串。 有关JSON语法的描述,请参阅JSON对象。

reviver(可选)

如果一个函数,它规定了最初由解析产生的值如何转换,然后再返回。

返回值

与给定的JSON文本相对应的Object。

例外

如果要解析的字符串不是有效的JSON,则会抛出SyntaxError异常。




JSON.parse(jsonString);

json.parse将变成对象。




这似乎是问题:

接收到的输入,通过ajax websocket等,它总是会以字符串格式 - 但你需要知道它是否是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'
});



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

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






Related