"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"]'}] });
在任何一种情况下,您都可以通过选择正确的引号使事情变得容易得多,这样您就不需要转义内部引号,并且不必将对象文字键不必要地用引号引起来。
我有一个正在开发的 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"]'}] });
在任何一种情况下,您都可以通过选择正确的引号使事情变得容易得多,这样您就不需要转义内部引号,并且不必将对象文字键不必要地用引号引起来。