" Uncaught SyntaxError:意外的令牌"使用JSON解析主干

时间:2015-01-31 15:13:03

标签: javascript json backbone.js

我有一个Rails /骨干应用程序我正在努力。我想将来自Rails的一个属性转换为骨干中的javascript数组。

Rails以字符串化的JSON(我认为)

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

然后尝试在骨干中转换它:

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

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

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

我已尝试检查devtools中的属性:

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

其中显示:" ["初学者","高级"]"

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

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

如果我创建一个新属性:

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

然后我可以使用这个新属性,它可以作为一个数组正常工作。我很困惑。为什么我无法更改原始属性?

有更好的方法吗?我真正想要的是来自rails的字符串作为骨干中的数组。

更新

我采用了基于梅加尔答案的新方法。我决定不将数组作为JSON传递。

代码:

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

产生:" ["初学者","高级"]"

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

{"技术人员":" [\"初级\" \"高级\"]"}

我无法弄清楚如何解决这个问题,所以我停止使用JSON.stringify。

1 个答案:

答案 0 :(得分:1)

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

您需要停止使用JSON(它真的不明白为什么你在这里)或使用格式正确的JSON字符串。

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

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

在第二种情况下,您需要生成一个有效的JSON字符串以便解析它:

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

在任何一种情况下,您都可以通过选择正确的引号使自己变得更容易,这样您就不需要转义内部引号,也不会不必要地将对象文字键包装在引号中。