Parsing JSON with Javascript
Parsing JSON with Javascript
我从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,因为status
和addresses
周围的引号丢失;既不是有效的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。
要修复的两个问题:
- 在"OK"周围添加引号,使其成为合法的javascript字符串
- 在发送到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()
更安全。
- Modify Javascript with C#
- JavaScript with PHP SESSION
- Javascript with IE 11 issue
- javascript with()函数获胜'我不适合歌剧、Chrome或Brave
- Javascript with Heroku
- sqlite with javascript with phonegap using build.phonegap.co
- Including html+javascript with javascript
- .post javascript with PHP 以启用 select 语句返回
- Scrape query JavaScript with scrapy
- 正则表达式 JavaScript with punct,space 和 alnum
- writing JavaScript with PHP
- 将字符串从 C# 传递到 Javascript with Phonegap 和 Windows Phone 8
- Javascript with SJCL lib,在 GCM 模式下解密 AES
- Javascript with jquery datepicker using knockout
- Java to JavaScript with NodeJS convertion
- onMouseOver JavaScript with CSS list-style-image
- Appending on javascript with onclick
- javascript with html for stickynotes
- Scraping javascript with R
- Inserting javascript with jQuery .html