"Uncaught SyntaxError: Unexpected token" with JSON parse in backbone

"Uncaught SyntaxError: Unexpected token" with JSON parse in backbone

我有一个正在开发的 Rails/backbone 应用程序。我想将来自 Rails 的属性之一转换为 backbone 中的 javascript 数组。

Rails 将属性作为字符串化 JSON(我认为)

$(function () {
  App.initialize({ projectsJson: [{"skill":"[\"Beginner\",\"Advanced\"]"}] });
});

然后尝试将其转换为 backbone:

App.Models.Project = Backbone.Model.extend({

  initialize: function() {
    this.set({
      skill: JSON.parse(this.get('skill'))
    });
  }

我收到此错误:未捕获的语法错误:意外的令牌 B

我试过在 devtools 中检查属性:

var test = this.get('skill');

其中显示:“["Beginner","Advanced"]”

和:

var test = JSON.parse(this.get('skill'));

其中显示了一个包含 2 个元素的数组对象。

如果我创建一个新属性:

this.set({
  skillTEST: JSON.parse(this.get('skill'))
});

然后我可以使用这个新属性,它作为一个数组工作得很好。我很困惑。为什么我不能更改原始属性?

有更好的方法吗?我真正想要的是来自 rails 的字符串成为 backbone.

中的数组

更新:

我根据 meagar 的回答采用了一种新方法。我决定不以 JSON.

的形式传递数组

代码:

JSON.stringify(new Array("Beginner","Advanced"));

产生:“["Beginner","Advanced"]”

backbones collection.create 方法正在发送 POST 请求:

{"skill":"[\"Beginner\",\"Advanced\"]"}

我不知道如何解决这个问题,所以我停止使用 JSON.stringify。

字符串 "\"Beginner\",\"Advanced\"]" 无效 JSON,所以不,它不会解析。

您要么需要停止使用 JSON(您在这里的原因真的不明显),要么使用格式正确的 JSON 字符串。

在第一种情况下,您只需传递 JavaScript 个数组,并使用数组文字指定您的配置:

App.initialize({ projects: [{skill: ['Beginner', 'Advanced']}] });

在第二种情况下,您需要生成一个有效的 JSON 字符串才能对其进行解析:

App.initialize({ projectsJson: [{skill: '["Beginner","Advanced"]'}] });

在任何一种情况下,您都可以通过选择正确的引号使事情变得容易得多,这样您就不需要转义内部引号,并且不必将对象文字键不必要地用引号引起来。