0

在 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);
4

3 回答 3

2

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

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

演示(点击“Run with JS”并打开控制台)

(请注意,由于 forEach要在 IE8 上运行,此代码需要一个 shim)

于 2013-04-18T08:08:17.023 回答
1

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

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

于 2013-04-18T08:08:51.027 回答
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);

现场测试用例

于 2013-04-18T08:13:12.920 回答