我知道这听起来很简单,但是我花了太多时间。默认情况下,我希望sequelize的输出是一个纯对象,没有任何数组。
我以前使用过string bananacolor = "yellow";
if (StringComparer(bananacolor, new string[] { "yellow", "brown", "blue" })) { bool bananaIsRipe = true; }
}
private static bool StringComparer(string source, string[] values)
{
foreach (var value in values)
{
if (source == value) return true;
}
return false;
}
,但是在这种情况下不起作用。我需要维护原始树。我有4个嵌套关联的复杂结果。开发人员提供了一个名为sequelize-to-json的程序包,但是将其应用于最新版本的sequelize之后,我的对象中仍然有数组。我认为该插件可能不再受支持,因为上一次提交是在一年多以前。
这是我的模特:
raw: true
输出是这样的:
Namespace.findAll({
attributes: ['namespace', 'description'],
include: {
model: Domain,
as: 'domains',
attributes: ['domain', 'description'],
required: false,
include: {
model: Attribute,
as: 'attributes',
attributes: ['attribute', 'description'],
required: false,
include: {
model: Value,
as: 'values',
attributes: ['type', 'value'],
required: false,
where: {
[Op.or]: [{ uuid }, { uuid: '00000000-0000-0000-0000-000000000000' }],
},
// order: [['id', 'ASC']],
},
},
},
})
首选输出将是这样的:(简化为验证json) { “ namespace”:“ orangeApp”, “ description”:“移动应用程序电子邮件通知”, “域”:{
[
{
"namespace": "orangeApp",
"description": "Mobile App Email Notifications",
"domains": [
{
"domain": "notifications",
"description": "Notifications",
"attributes": [
{
"attribute": "scheduled_medication",
"description": "Scheduled Medication",
"values": [
{
"type": "delivery_method",
"value": "push"
},
{
"type": "preview_type",
"value": "basic"
}
]
},
{
"attribute": "new_messages",
"description": "New Messages",
"values": [
{
"type": "blahhhhhh",
"value": "true"
}
]
},
{
"attribute": "friend_requests",
"description": "Friend Requests",
"values": [
{
"type": "dc",
"value": "true"
}
]
}
]
}
]
}
]
有什么建议吗?我已经看到了许多人获取纯JSON的示例,但是由于我有关联并且想要维护树,所以我没有看到一个很好的示例。感谢所有帮助
答案 0 :(得分:0)
如果您知道查询将仅返回其中包含一个对象的数组,则可以使用findOne方法而不是findAll。如果要使用那里的东西,可以执行以下操作:
let result = Namespace.findAll({
attributes: ['namespace', 'description'],
include: {
model: Domain,
as: 'domains',
attributes: ['domain', 'description'],
required: false,
include: {
model: Attribute,
as: 'attributes',
attributes: ['attribute', 'description'],
required: false,
include: {
model: Value,
as: 'values',
attributes: ['type', 'value'],
required: false,
where: {
[Op.or]: [{ uuid }, { uuid: '00000000-0000-0000-0000-000000000000' }],
},
// order: [['id', 'ASC']],
},
},
},
})
let cleanResult = result[0].domains[0]
仅当您仅返回一个结果并且仅对那个domains属性中的第一个域对象(看起来好像是您)感兴趣时,才执行此操作。
为加强您收到的评论,数组确实是有效的JSON。