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

给定一串JSON数据,如何安全地将该字符串转换为JavaScript对象?

显然,我可以使用类似的方法不安全地执行此操作:

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

但这使我容易受到包含其他代码的JSON字符串的影响,仅进行评估似乎很危险。

达蒙Davaid斯丁2020/03/09 21:36:57
/**
 * Safely turning a JSON string into an object
 *
 * @param {String} str - JSON String
 * @returns deserialized object, false if error
 */
export function jsonParse(str) {
  let data = null;
  try {
    data = JSON.parse(str);
  } catch (err) {
    return false;
  }
  return data;
}
小胖A2020/03/09 21:36:57

试试这个。这是用 TypeScript写的。

         export function safeJsonParse(str: string) {
               try {
                 return JSON.parse(str);
                   } catch (e) {
                 return str;
                 }
           }
乐泡芙A2020/03/09 21:36:57

您也可以使用reviver功能进行过滤。

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

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

村村西里Green2020/03/09 21:36:57

JSON.parse是将字符串转换为对象的正确方法,但是如果所解析的字符串不是对象或字符串不正确,则它将抛出错误,导致其余代码中断,因此将JSON.parse函数包装在try-catch中的理想选择

try{
   let obj = JSON.parse(string);
}catch(err){
   console.log(err);
}
宝儿宝儿2020/03/09 21:36:57

官方文件

JSON.parse()方法解析JSON字符串,以构造JavaScript值或该字符串描述的对象。reviver可以提供一个可选函数,以在返回结果对象之前对其执行转换。

句法:

JSON.parse(text[, reviver])

参数:

text :要解析为JSON的字符串。有关JSON语法的说明,请参见JSON对象。

reviver (optional) :如果是函数,则此函数规定了在返回之前如何转换最初由解析产生的值。

返回值

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

例外情况

如果要解析的字符串无效的JSON,则引发SyntaxError异常。

Davaid阳光小卤蛋2020/03/09 21:36:57
JSON.parse(jsonString);

json.parse将变为object。

猴子蛋蛋2020/03/09 21:36:57

如果我们有这样的字符串:

"{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"

然后我们只需使用JSON.parse两次即可将此字符串转换为JSON对象:

var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)

我们可以使用以下方法从JSON对象提取值:

// instead of last JSON.parse:
var { status, token } = JSON.parse(jsonString);

结果将是:

status = 1 and token = 65b4352b2dfc4957a09add0ce5714059
TomEva2020/03/09 21:36:57

将对象转换为JSON,然后解析它对我来说很有效,例如:

JSON.parse(JSON.stringify(object))
神无Green前端2020/03/09 21:36:57

如果您使用的是jQuery,则还可以使用:

$.getJSON(url, function(data) { });

然后您可以做类似的事情

data.key1.something
data.key1.something_else

等等

Itachi梅Harry2020/03/09 21:36:57

现在不推荐使用jQuery方法。请改用此方法:

let jsonObject = JSON.parse(jsonString);

使用不推荐使用的jQuery功能的原始答案

如果您使用的是jQuery,请使用:

jQuery.parseJSON( jsonString );

正是您要找的东西(请参阅jQuery 文档)。

斯丁JinJinHarry2020/03/09 21:36:57

此答案适用于IE <7,对于现代浏览器,请查看上面的Jonathan答案。

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

JSON.org具有用于多种语言的JSON解析器,其中包括用于JavaScript的四种不同语言。我相信大多数人会认为json2.js是他们的goto实现。

さ恋旧る2020/03/09 21:36:56

JSON.parse(jsonString) 只要您可以保证使用相当现代的浏览器,它就是一种纯JavaScript方法。