Javascript normalizerv3和jsonapi
我希望将从API收到的响应标准化。典型的响应可能如下所示:Javascript normalizerv3和jsonapi,javascript,normalizr,Javascript,Normalizr,我希望将从API收到的响应标准化。典型的响应可能如下所示: // Get all projects {data:[ { id: 1 ... team:{ data: { id:15 ... } } }, { id:2, .... }, {
// Get all projects
{data:[
{
id: 1
...
team:{
data: {
id:15
...
}
}
},
{
id:2,
....
},
{
id:3,
...
}
]}
{
entities:{
projects:{
undefined:{
0:{
team:{
data:{
id:15,
...
}
}
},
1:{...},
2:{...}.
...
50:{...},
}
}
},
result:[] // length is 0
}
如何编写模式,使其删除“数据”容器?
目前,我的模式如下所示:
export const project = new schema.Entity('projects', {
team: team, // team omitted
},
{
processStrategy: (value, parent, key) => parent.data
}
)
export const arrayOfProjects = new schema.Array(project)
我使用它就像:
const normalizedProjects = normalize(jsonResponse, arrayOfProjects)
然后,normalizedProjects如下所示:
// Get all projects
{data:[
{
id: 1
...
team:{
data: {
id:15
...
}
}
},
{
id:2,
....
},
{
id:3,
...
}
]}
{
entities:{
projects:{
undefined:{
0:{
team:{
data:{
id:15,
...
}
}
},
1:{...},
2:{...}.
...
50:{...},
}
}
},
result:[] // length is 0
}
我也不知道为什么项目列表包含在“未定义”中?要省略
数据的每个实体架构(或任何其他基本更改)都需要包含一个用于删除或更改任何数据的。(请参阅中的更多示例)我也使用json_api模式。
像这样怎么样
const projectsSchema = new schema.Entity('projects', {}, {
processStrategy: processStrategy
});
export const processStrategy = (value, parent, key) => {
const attr = value.attributes;
delete value.attributes;
return { ...value, ...attr };
};
export const fetchProjectsSchema = {
data: [projectsSchema]
}
感谢您提供的提示,我现在已经尝试过了,但是我似乎无法从processStrategy函数返回的任何内容中删除“未定义”对象作为父对象,该函数类似于processStrategy:(value,parent,key)=>parent.data;。你知道是什么原因吗?如果你能展示一些代码,你正在做的事情可能会更清楚。编辑原始问题以缩小数据,并展示我在为流程策略做什么。你正在使用JSONAPI模式,就像在JSONAPI.org中一样?(不仅仅是一个“json api”)。所以,normalizer对于JSONAPI来说并不是很好。有一个normalizer分支试图很好地使用它,但我不确定它是否有任何用处