Parsing JSON with Javascript

Parsing JSON with Javascript

本文关键字:Javascript with JSON Parsing      更新时间:2023-09-26

我从AJAX调用中收到了这个JSon字符串:

{status:OK,addresses:[0,1,2,3,4,5]}

要将其转换为JSon对象,我有这样一行:

var jsonObj = eval(jsonString);

但是抛出了一个异常!这个在异常变量中没有消息。我也试过使用

{"status":"OK","addresses":[0,1,2,3,4,5]}

而且,再一次抛出了一个异常,但表示意外的字符"&"已找到。

我正在使用Struts2,JSon是从一个操作中收到的。

任何帮助都将不胜感激。感谢

{status:OK,addresses:[0,1,2,3,4,5]}

不是有效的JSON,因为statusaddresses周围的引号丢失;既不是有效的JSON,也不是有效的JavaScript,因为OK周围的引号缺失。

此外,不要使用eval来解析JSON——它允许攻击者在页面的上下文中执行任意JavaScript。相反,使用安全的替代方案JSON.parse(内置于现代浏览器和其他EcmaScript 5实现中(或JSON2。

不要使用eval:使用适当的JSON解析器,如JSON2。

您可能在响应中有额外的内容:检查您是否没有打印其他内容。

这对我有效:

JSON.parse('{ "status" : "OK", "addresses" : [0,1,2,3,4,5]}');

如果您想使用eval,那么您需要使用您发布的第二个示例({"status":"OK","addresses":[0,1,2,3,4,5]}(,并且您需要用括号将字符串括起来,如下所示:

var jsonObj = eval( '('+jsonString+')' );

这使得jsonString成为一个有效的javascript语句。

话虽如此,我鼓励您使用JSON.parse,就像许多其他人发布的那样。它要安全得多。

您没有JSON字符串。您确实有一个对象文字。你需要名字加引号。

{"status":OK, "addresses":[0,1,2,3,4,5]}

基于此评论:

所以我验证了当JSon从请求中收到时,所有的"都被替换为"……这会是问题吗?

是的。JSON解析器期望接收JSON作为输入,而不是HTML编码的JSON。

要修复的两个问题:

  1. 在"OK"周围添加引号,使其成为合法的javascript字符串
  2. 在发送到eval之前,在字符串周围添加parens,如下eval("(" + jsonString + ")")';

此:

{status:OK,addresses:[0,1,2,3,4,5]}

必须更改为:

{status:"OK",addresses:[0,1,2,3,4,5]}

有效的Javascript(注意"OK"周围的引号(。

它应该是有效的JSON(键周围也有引号(:

{"status":"OK", "addresses":[0,1,2,3,4,5]}

OK all本身并不是一个已知的Javascript片段,它周围没有引号,使其成为Javascript字符串。将来,您可以在一个小的测试台上测试自己,看看您最喜欢的javascript调试器中的错误是什么

http://jsfiddle.net/jfriend00/FcSKR/

var jsonString = '{"status":"OK","addresses":[0,1,2,3,4,5]}';
var jsonObj = eval("(" + jsonString + ")");
alert("success");

如果在发送到eval之前,{"status":"OK","addresses":[0,1,2,3,4,5]}和添加parens仍然出现错误,那么你的数据并不是你想象的那样,你需要进行一些调试,看看响应中到底有什么(查看调试器中的值,将值放入警报中,等等…(。响应中可能还有一些你不知道会有的其他东西。

注意:在某些情况下,像JSON.parse()这样的JSON解析器和合法的JSON字符串比使用Javascript的eval()更安全。