SyntaxError:意外的令牌Q.

时间:2013-04-18 07:57:39

标签: javascript

在Chrome控制台中使用此代码我收到错误

SyntaxError: Unexpected token Q

我需要的是使用JSON.parse()转换对象中的输入。

知道如何修复此错误吗?

var input = 'QR|BEGIN:VEVENT\r\nSUMMARY:Event test 18 APrile\r\nDTSTART:20130418T085900Z\r\nDTEND:20130418T105900Z\r\nLOCATION:Class 18\r\nDESCRIPTION:Desc 18 APrile\r\nEND:VEVENT';

    var output = input.split(/\r\n/);
    output = "{" + output  + "}";
    alert(output);

    var outputJson = JSON.parse(output);
    console.log(outputJson);

3 个答案:

答案 0 :(得分:2)

因为它根本不是JSON,所以不要将其解析为JSON。这是你如何做到的:

var obj = {};
input.split("\r\n").forEach(function(t){
  var nv = t.split(':');
  obj[nv[0]]=nv[1];
});

Demonstration(点击“使用JS运行”并打开控制台)

(请注意,此代码需要a shim due to forEach才能在IE8上运行)

答案 1 :(得分:1)

JSON.parse需要一个JSON格式字符串作为参数,并将其转换为JavaScript对象。您的变量input不是JSON格式,因此是错误消息。

您可以参考http://en.wikipedia.org/wiki/JSON关于JSON格式字符串的外观及其构建方式。

答案 2 :(得分:0)

JSON.parse()方法期望开始使用有效的JSON字符串。

这里的真正任务是从现有数据中生成这样一个有效的字符串,其中一种方法是:

var output = input.split(/\r\n/);
for (var i = 0; i < output.length; i++) {
    var temp = output[i].split(":");
    output[i] = "\"" + temp[0] + "\": \"" + temp[1] + "\"";
}
var strJSON = "{" + output.join(", ") + "}";
var outputJson = JSON.parse(strJSON);

Live test case