Javascript 是否有可能使“正常化”;卓越如「;JSON(不带id)和;“正常化”吗;?
我想知道是否有可能将此类JSON标准化:Javascript 是否有可能使“正常化”;卓越如「;JSON(不带id)和;“正常化”吗;?,javascript,arrays,json,object,normalizr,Javascript,Arrays,Json,Object,Normalizr,我想知道是否有可能将此类JSON标准化: { "rows": [{ "cells": [{ "value": "Column Name 1" }, { "value": "Column Name 2" }, { "value": "Column Name 3" },
{
"rows": [{
"cells": [{
"value": "Column Name 1"
},
{
"value": "Column Name 2"
},
{
"value": "Column Name 3"
},
{
"value": "Column Name 4"
}
]
},
{
"cells": [{
"value": "Second Row Thing1"
},
{
"value": "Second Row Thing2"
},
{
"value": "Second Row Thing3"
},
{
"value": "Second Row Thing4"
}
]
},
{
"cells": [{
"value": "Third Row Thing1"
},
{
"value": "Third Row Thing2"
},
{
"value": "Third Row Thing3"
},
{
"value": "Third Row Thing4"
}
]
}
]
}
以这样好的格式:
{
"rows": [{
"Column Name 1": "Second Row Thing1"
"Column Name 2": "Second Row Thing1"
"Column Name 3": "Second Row Thing1"
"Column Name 4": "Second Row Thing1"
},
{
"Column Name 1": "Third Row Thing1"
"Column Name 2": "Third Row Thing1"
"Column Name 3": "Third Row Thing1"
"Column Name 4": "Third Row Thing1"
}
]
}
基本上,我希望获取第一行的数据,并将其视为列名称。然后使用这些列名作为行对象中键的名称。有可能用“normalizer”做这样的事情吗?或者我应该深入研究“地图”、“foreach”等东西吗 您真的不需要normalizer(而且您不应该使用它,因为它不起作用)。normalizer用于嵌套数据:引用其他实体的实体(如嵌入tweet的用户) Map/Reduce对于这样的东西非常有效。这里有一个片段完全符合您的要求
const data={“行”:[
{“单元格”:[{“值”:“列名1”},{“值”:“列名2”},{“值”:“列名3”},{“值”:“列名4”}]},
{“单元格”:[{“值”:“第二行内容1”},{“值”:“第二行内容2”},{“值”:“第二行内容3”},{“值”:“第二行内容4”}]},
{“单元格”:[{“值”:“第三行内容1”},{“值”:“第三行内容2”},{“值”:“第三行内容3”},{“值”:“第三行内容4”}]}
]};
//获取第一行的值的数组
const columns=data.rows[0].cells.map(({value})=>value);
//slice=获取除第一行以外的所有行
//映射每个单元格数组
常量normalizedData=data.rows.slice(1.map)({cells})=>{
//reduce=将单元格数组转换为对象贴图
返回单元格.reduce((memo,{value},i)=>{
备注[列[i]]=值;
返回备忘录;
}, {});
});
log(JSON.stringify(normalizedData,null,2))代码>您真的不需要normalizer来实现这一点(而且您不应该使用它,因为它不起作用)。normalizer用于嵌套数据:引用其他实体的实体(如嵌入tweet的用户)
Map/Reduce对于这样的东西非常有效。这里有一个片段完全符合您的要求
const data={“行”:[
{“单元格”:[{“值”:“列名1”},{“值”:“列名2”},{“值”:“列名3”},{“值”:“列名4”}]},
{“单元格”:[{“值”:“第二行内容1”},{“值”:“第二行内容2”},{“值”:“第二行内容3”},{“值”:“第二行内容4”}]},
{“单元格”:[{“值”:“第三行内容1”},{“值”:“第三行内容2”},{“值”:“第三行内容3”},{“值”:“第三行内容4”}]}
]};
//获取第一行的值的数组
const columns=data.rows[0].cells.map(({value})=>value);
//slice=获取除第一行以外的所有行
//映射每个单元格数组
常量normalizedData=data.rows.slice(1.map)({cells})=>{
//reduce=将单元格数组转换为对象贴图
返回单元格.reduce((memo,{value},i)=>{
备注[列[i]]=值;
返回备忘录;
}, {});
});
log(JSON.stringify(normalizedData,null,2))代码>请记住,对象属性没有定义的顺序。请记住,对象属性没有定义的顺序。