嗨,我正在尝试从数据库中获取一组对象。
模型
checklist: {
type: DataTypes.ARRAY(DataTypes.JSON),
allowNull: true,
defaultValue: []
}
查询
return Note.findAll({
order: '_id ASC',
attributes: [
'_id',
'checklist'
]
})
像这样的对象:
"checklist": [
{checked: true, text: "Shortening"},
{checked:true, text: "Margarine"},
{checked:false, text: "Canned Stewed Tomatoes"},
{checked:true, text: "Onions"}
]
我得到一个字符串数组
"checklist": [
"{\"checked\":true,\"text\":\"Shortening\"}",
"{\"checked\":true,\"text\":\"Margarine\"}",
"{\"checked\":false,\"text\":\"Canned Stewed Tomatoes\"}",
"{\"checked\":true,\"text\":\"Onions\"}"
]
我尝试使用getter和setter,因为它可以正常工作,但是当我尝试更新元素时会抛出错误。 谢谢!
现在我可以使用JSON.parse()解析数据,现在的问题是我正在更新某些内容。这就是sequelize做的事:"checklist"=ARRAY['{"checked":true,"text":"Shortening"}','{"checked":true,"text":"Margarine"}','{"checked":false,"text":"Canned Stewefd Tomatoes"}','{"checked":true,"text":"Onions"}']::JSON[]
这个带有此文本的返回错误500:
SyntaxError: Unexpected token o in JSON at position 1
在yoogeeks检查评论后,我决定在模型中创建一个getter函数
checklist: {
type: DataTypes.ARRAY(DataTypes.JSON),
allowNull: true,
defaultValue: [],
get() {
const data = this.getDataValue('checklist');
const toSend = [];
data.forEach(val => {
toSend.push(JSON.parse(val));
});
return toSend;
}
},
这适用于GET但是当我尝试更新某些记录时,它仍会抛出错误。最后,我决定做一点检查,以确定清单字段是否为字符串。
checklist: {
type: DataTypes.ARRAY(DataTypes.JSON),
allowNull: true,
defaultValue: [],
get() {
const data = this.getDataValue('checklist');
const toSend = [];
data.forEach(val => {
toSend.push(typeof val === 'string' ? JSON.parse(val) : val);
});
return toSend;
}
},
这很有效。
我不知道为什么会发生这种情况,但我的理论是,当我更新sequelize时,转到模型并进行另一个GET以返回数据,但是当它执行此操作时,检查表字段仍然是一个数组而不是字符串,所以这就是为什么我得到SyntaxError: Unexpected token o in JSON at position 1
。如果有人知道什么是好的学习:)
非常感谢!!
方言: postgres Sequelize版本: 3.23.6
答案 0 :(得分:0)
在yoogeeks检查评论后,我决定在模型中创建一个getter函数
checklist: {
type: DataTypes.ARRAY(DataTypes.JSON),
allowNull: true,
defaultValue: [],
get() {
const data = this.getDataValue('checklist');
const toSend = [];
data.forEach(val => {
toSend.push(JSON.parse(val));
});
return toSend;
}
},
这适用于GET但是当我尝试更新某些记录时,它仍会抛出错误。最后,我决定做一点检查,以确定清单字段是否为字符串。
checklist: {
type: DataTypes.ARRAY(DataTypes.JSON),
allowNull: true,
defaultValue: [],
get() {
const data = this.getDataValue('checklist');
const toSend = [];
data.forEach(val => {
toSend.push(typeof val === 'string' ? JSON.parse(val) : val);
});
return toSend;
}
},
这很有效。
我不知道为什么会发生这种情况,但我的理论是,当我更新sequelize时,转到模型并进行另一个GET以返回数据,但是当它执行此操作时,检查表字段仍然是一个数组而不是字符串,所以这就是为什么我在位置1的JSON中获取SyntaxError:Unexpected token o。如果有人知道究竟是什么将是很好的学习:)