【问题标题】:JSON Parse: Uncaught SyntaxError: Unexpected token eJSON Parse: Uncaught SyntaxError: Unexpected token e
【发布时间】:2016-03-11 14:15:57
【问题描述】:

我正在尝试解析 JSON 字符串。这是字符串的内容:

[[ new Date(2016, 2, 11), 439 ],[ new Date(2016, 2, 10), 1110 ],[ new Date(2016, 2, 9), 9 ],[ new Date(2016, 2, 8), 2 ]]

这是代码

var data = JSON.parse(str);

这是错误

Uncaught SyntaxError: Unexpected token e

如何准备这个字符串以供 JSON.parse() 解析?

【问题讨论】:

  • 这不是 JSON。你到底想做什么?字符串从何而来?任何声称返回 JSON 的 API 都不会产生这种情况。
  • 运行你的“json”here
  • 我使用谷歌图表。我从 PHP 返回这些数据。我以这种格式回应它,以便日历接受它。当我将它直接从 PHP 回显到 JavaScript 时它可以工作,但是当我从 AJAX 加载数据并使用 JSON.parse() 时它不起作用
  • @Z0q — JSON 是一种基于 JavaScript 对象文字语法子集的数据格式。您不能将任何您喜欢的 JavaScript 表达式放入 JSON 文本中。
  • 对,那是因为它不是 JSON。它 有效的JavaScript 语法,但它是JSON 语法的超集。您不能在 JSON 中嵌入表达式,因此您的日期应该以字符串或时间戳的形式输出。

标签: javascript json string parsing


【解决方案1】:

您需要用有效的 JSON 数据类型替换 new Date(2016, 2, 11) 的每个实例。

您可以使用例如包含 ISO 8601 数据的字符串或表示自纪元以来的秒数的数字来表示日期。

【讨论】:

    【解决方案2】:

    我解决了这个问题:

    eval( "data = " + str );
    

    【讨论】:

      【解决方案3】:

      在 JavaScript 中,像这样构造它 (http://www.w3schools.com/json/json_syntax.asp)...

      // Bear in mind that month 2 = March in JavaScript!
      var dte1 = new Date(2016, 2, 11);
      var dte2 = new Date(2016, 2, 10);
      var dte3 = new Date(2016, 2, 9);
      var dte4 = new Date(2016, 2, 8);
      
      var str = '[ ';
      str += '{ "d": "' + dte1.toJSON() + '", "n": 439 }, ';
      str += '{ "d": "' + dte2.toJSON() + '", "n": 1110 }, ';
      str += '{ "d": "' + dte3.toJSON() + '", "n": 9 }, ';
      str += '{ "d": "' + dte4.toJSON() + '", "n": 2 } ]';
      
      var data = JSON.parse(str);
      
      alert("Date: " + data[0].d);
      alert("Amount: " + data[0].n);
      

      我已将其构造为具有属性 d 和 n 的对象数组,以允许您访问数组中每个对象的日期和编号。您应该将这些称为对您的需求更有意义的东西。

      【讨论】:

        猜你喜欢
        • 2012-08-31
        • 2011-12-17
        • 1970-01-01
        • 2012-05-17
        • 2019-02-10
        • 2014-07-08
        • 2011-03-09
        • 2014-01-06
        • 2012-04-10
        相关资源
        最近更新 更多