Javascript 是否有可能使“正常化”;卓越如「;JSON(不带id)和;“正常化”吗;?

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" },

我想知道是否有可能将此类JSON标准化:

{
"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))请记住,对象属性没有定义的顺序。请记住,对象属性没有定义的顺序。