【问题标题】:JSON.parse is not workingJSON.parse 不工作
【发布时间】:2025-12-04 14:30:01
【问题描述】:

我遇到了一个非常奇怪的问题。我的 JSON.parse 似乎不起作用。我也尝试过使用 eval 但这也无济于事。以下是我的代码:

var responseDoc = xmlHttp.responseText;
document.getElementById("debug1").innerHTML=responseDoc;
var response = JSON.parse(responseDoc);
document.getElementById("debug2").innerHTML=response.category;

我的 responseDoc 看起来像这样

{"id":null,"category":"dog","price":"4321","name":"new product 123","sku":"1234","success":true}

但是 response.category 是 "undefined"。任何想法为什么会发生这种情况?我已经花了几个小时,但无法弄清楚。非常感谢!

*更新*

按照某些人的建议删除了 stringify -> 仍然无法正常工作。

如果我尝试下面的代码,我会从控制台收到“Uncaught SyntaxError: Unexpected token

var response = JSON.parse(xmlHttp.responseText);

*更新 2 *

发现问题。这是因为我的 responseDoc 正在获取 HTML Doc。不是 JSON 对象。不知道为什么会这样。这是我处理ajax请求的代码(我正在使用jsp):

        JSONObject result = new JSONObject();

        result.put("success",true);
        result.put("id",request.getParameter("id"));
        result.put("name", request.getParameter("name"));
        result.put("sku",request.getParameter("sku"));
        result.put("price",request.getParameter("price"));
        result.put("category",request.getParameter("category"));

        out.print(result);
        out.flush();

【问题讨论】:

  • 我觉得不错! jsfiddle.net/nikhilpatil/m5Kdq 任何特定的浏览器?
  • @NikhilPatil:该问题特定于通过 XMLHttpRequest 获取数据(其中响应是字符串,而不是对象) - 将值作为文字转储的代码不太可能是一个很好的并行。
  • @cloudfeet 你可能是对的。原因除了明显不需要的字符串化之外,其余代码都是有效的(应该可以工作)所以罪魁祸首必须是正在获取的数据(或获取数据的方式)
  • Dao Lam:由于您使用的是 Chrome,因此您应该对代码进行断点并检查值。当你这样做时,你会看到responseDoc 的值是一个字符串,而不是一个对象。
  • 道林:你应该也能看到response的值也是一个字符串,而不是一个对象——这是因为JSON.stringify()的使用适得其反。取出字符串化,然后告诉我们您看到的 response 的值。

标签: ajax json jsp parsing


【解决方案1】:

您不需要 stringify 已经是字符串 (xmlHttp.responseText) 的东西。 stringify 方法应该用于 javascript 对象以将其序列化为 JSON 字符串。所以摆脱这种字符串化并简单地解析你已经拥有的 JSON 字符串(使用JSON.parse 方法):

var response = JSON.parse(responseDoc);

【讨论】:

  • 那也没用。我最初有,但在某处读到我应该使用 stringify,所以我添加了。
  • 使用 stringify 仍然是完全错误的。您可能也有 second 问题,但是任何可以帮助您的人都会在看到 stringify 时停下来。您需要删除 stringify 并 然后 告诉我们您的问题是什么。
【解决方案2】:

你不需要stringify一个字符串:

var response = JSON.parse(responseDoc);

【讨论】:

  • 嗨,这是我原来的,但没有工作,所以我玩了一下。但是没有 stringify 并不能解决问题... :(
  • 尝试使用console.log(responseDoc) 看看它是否真的是您认为的字符串。
  • 是的。控制台打印出 responseDoc 的正确值。
  • 道林:控制台是打印出一些看起来像 JSON 的东西,还是打印出一个花哨的多色的东西,你可以点击它来做事?如果它不是多色的,那么它的 responseDoc 是一个字符串,而不是一个对象。由于JSON.parse()JSON.stringify 相互抵消,这意味着response 也是一个字符串,而不是一个对象。
  • 实际上我的控制台说 console.log(responseDoc) 行给出了这样的内容:<html> <title>VIEW PRODUCTS</title> </head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <script type="text/javascript" src="scripts.js"></script> </head> <body> {"id":null,"category":"dog","price":"123","name":"it's me","sku":"120391","success":true} </body> </html>