javascript - js字符串转json - 将json转为对象




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

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));

你会得到输出为Object {result:true,count:1}。

为了使用这个对象,你可以把它分配给变量让我们说obj: -

var obj = JSON.parse(response);

现在通过使用obj和dot(。)运算符,您可以访问JSON对象的属性。

尝试运行该命令

console.log(obj.result);

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

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

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

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


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.parse(jsonString)是一种纯粹的JavaScript方法,只要你能保证一个合理的现代浏览器。


正式记录

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

句法

JSON.parse(text[, reviver])

参数

文本

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

reviver(可选)

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

返回值

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

例外

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


使用parse()方法的最简单方法是:

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

那么你可以得到Json元素的值,例如:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

按照documentation描述使用jQuery

JSON.parse(jsonString);

使用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);

如果你使用jQuery ,你也可以做$.getJSON(url, function(data) { });

然后你可以做一些事情,比如data.key1.somethingdata.key1.something_else等。


如果你想这个方法可以用这种方式。这里你想要的数据对象例如:Data ='{result:true,count:1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

这个方法真的有助于Nodejs如果你正在使用串口编程


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

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

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


我不确定其他方法来做到这一点,但这里是你如何在Prototype(JSON教程)中做到这一点。

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

使用true作为参数调用evalJSON()来清理传入的字符串。


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


编辑:这个答案已经过时了, 乔纳森的回答如上 ( JSON.parse(jsonString) )现在是最好的答案。

JSON.org为许多语言提供了JSON解析器,包括4种不同的Javascript语言。 我相信大多数人会考虑json2.js他们的实现。


这似乎是问题:

接收到的输入,通过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()方法进行分析。





json