【问题标题】:JavaScript SyntaxError: JSON.parse: unexpected character line 1JavaScript SyntaxError:JSON.parse:意外字符行 1
【发布时间】:2016-07-27 20:36:43
【问题描述】:

在 Python 中,我使用数据加载一个变量,然后使用此代码将其转换为 json。

jsVar = (json.dumps(jsPass)) 

产生这个输出。 {"TT1004": [[1004, 45.296109039999997, -75.926546579999993, 66.996664760000002, 150, false]], "TT1001": [[1001, 45.296471220000001, -75.923881289999997, 64.616423409999996, 150, false]], "TT1003": [[1003 ,45.29610937999997,-75.92654337999998,67.2400254199999995,150,false]],“ TT1002”,“ TT1002”::

输出通过 JSON Formatter & Validator 网站上的验证。当我运行 JavaScript 代码时

var myVar2 = {};
var myVar2 = JSON.parse(jsVar); 

我收到以下错误

SyntaxError: JSON.parse: JSON 数据的第 1 行第 2 列出现意外字符。

我不是很擅长 JS 和 JSON 新手。任何建设性的 cmets、网站或文献建议将不胜感激。

更好地关注实际问题。 从您非常有用的解释和问题中,我可以看出我不需要解析数据。正如此处所述,该变量包含有效的 JavaScript 数组数据。我发现在 Python 中生成的变量不是我在 JS 中访问的变量,即使它们位于相同的文件位置并且具有相同的名称。该过程设置为像这样运行。首先,Python 代码生成 JSON 变量,其次 JavaScript 代码使用 Python 中生成的变量中的数据分配一个变量,然后触发 HTML 文件以执行 JS 代码。当我查看 JavaScript 变量的 console.log 或 .dir 方法的输出时,没有数据。我需要学习的是如何将 Python 变量导入到 JavaScript 代码中。不知道这个问题能不能在这里回答,还是应该在 StackOverFlow 再问一个问题?

【问题讨论】:

  • 您究竟是如何从 python 获取数据到 javascript 的?
  • 是否可能已经返回 JSON(而不是需要解析的字符串)?
  • @Hodrobond:JSON 一个需要解析的字符串。还能怎么转移?
  • 抱歉,我认为它有可能作为对象而不是字符串被传输
  • @Hodrobond:是的,这需要了解浏览器中的 JS 引擎用于对象的二进制表示,以及导入二进制数据的方法。 JSON 以序列化的形式存在以弥补这一点。

标签: javascript python json


【解决方案1】:

我已经使用 JSONlint 进行了快速测试,因此您肯定已经获得了有效的 json。无需使用JSON.parse() 对其进行规范化,因为它已经可以了。您唯一需要做的就是:

var myVar2 = jsVar;

如果您选中console.log(myVar2.TT1001);,则会根据需要为您提供一些数组数据。

【讨论】:

    【解决方案2】:

    您的数据已经被解析,您可以像 javascript 对象一样简单地使用它。如果你的数据是这样的

    "{"TT1004":[[1004,45.29610904,-75.92654658,66.99666476,150,false]],"TT1001":[[1001,45.29647122,-75.92388129,64.61642341,150,false]],"TT1003":[[1003,45.29610938,-75.92654338,67.24002542,150,false]],"TT1002":[[1002,45.29626098,-75.92490861,65.30088048,150,true]]}"
    

    一个JSON字符串,那么你需要解析它,但你上面粘贴的数据是一个javascript对象。

    {
        "TT1004": [
          [1004, 45.296109039999997, -75.926546579999993, 66.996664760000002, 150, false]
        ],
        "TT1001": [
          [1001, 45.296471220000001, -75.923881289999997, 64.616423409999996, 150, false]
        ],
        "TT1003": [
          [1003, 45.296109379999997, -75.926543379999998, 67.240025419999995, 150, false]
        ],
        "TT1002": [
          [1002, 45.29626098, -75.924908610000003, 65.300880480000004, 150, true]
        ]
      }
    

    【讨论】:

    • 他在问题中发布的是,如果 JSON 来自服务器,它会是什么样子。不会有外引号。只有当您直接在 JS 程序中创建 JSON 数据时,这些才会出现,例如:var j = '{"foo":"bar"}'。外部引号不是结果数据的一部分。它们只是语法分隔符,告诉 JS 引擎您要创建一个字符串。
    • @squint 你太严格了.. :)
    • 是的,我知道... :-) 只是人们对 JSON 的东西很困惑。当他们在问题中发布原始 JSON 数据时,它看起来像 JavaScript 代码,因此有时很难判断他们实际拥有什么。
    【解决方案3】:

    您的数据已经是一个 JavaScript 对象。如果您不确定要返回的对象是否已经是有效的 JavaScript 对象,您可以这样做。

    if(typeof data != 'object') 
    { 
      var data = JSON.parse(data);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 2016-12-29
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多