从Javascript数组创建嵌套Json结构

从Javascript数组创建嵌套Json结构,javascript,arrays,json,Javascript,Arrays,Json,我希望从一个数组中创建一个有效的嵌套Json文件,该文件具有唯一的keys值。目前,我只能在没有任何嵌套结构的情况下显示json 我想向控制台显示以下结构: { "Key" : "data1", "header" : { "title" : "data2", "tag1" : "data3", "tag2" : "data4" }, "body" : { "text" : "data5" },

我希望从一个数组中创建一个有效的嵌套Json文件,该文件具有唯一的keys值。目前,我只能在没有任何嵌套结构的情况下显示json

我想向控制台显示以下结构:

{
    "Key" : "data1",
    "header" : {
        "title" : "data2",
        "tag1" : "data3",
        "tag2" : "data4"
    },
    "body" : {
        "text" : "data5"
    },
    "updates" : {
        "title" : "data6",
        "text" : "data7"
    },
    "footer" : {
        "title" : "data8",
        "row1" :{
            "col1" : {
                "title" : "data9",
                "text" : "data10"
            },
            "col2" : {
                "title" : "data11",
                "text" : "data12"
            }, 
            "col3" : {
                "title" : "data13",
                "text" : "data14"
            }
        },
        "row2" :{
            "col1" : {
                "title" : "data15",
                "text" : "data16"
            },
            "col2" : {
                "title" : "data17",
                "text" : "data18"
            }, 
            "col3" : {
                "title" : "data19",
                "text" : "data20"
            }
        },        
        "row3" :{
            "col1" : {
                "title" : "data22",
                "text" : "data23"
            },
            "col2" : {
                "title" : "data24",
                "titlebis" : "data25",
                "text" : "data26"
            }, 
            "col3" : {
                "title" : "data27",
                "text" : "data28"
            }
        },
        "row4" :{
            "col1" : {
                "title" : "data29"
            },
            "website" : "data30",
            "website-link" : "data31",
            "email" : "data38",
            "privacy" : "data32",
            "privacy-link" : "data33",
            "adr" : "data34",
            "adr2" : "data35"
        }        
    },
    "other" : {
        "short" : {
            "des" : "data36"
        },
        "promovideo" : "data37"
    }
}
以下是我已经做过的:

var data=[[“Key”,“data1”],
[“header.title”,“data2”],
[“header.tag1”,“data3”],
[“header.tag2”,“data4”],
[“body.text”,“data5”],
[“updates.title”,“data6”],
[“updates.text”,“data7”],
[“页脚标题”,“数据8”],
[“footer.row1.col1.title”,“data9”],
[“footer.row1.col1.text”,“data10”],
[“footer.row1.col2.title”,“data11”],
[“footer.row1.col2.text”,“data12”],
[“footer.row1.col3.title”,“data13”],
[“footer.row1.col3.text”,“data14”],
[“footer.row2.col1.title”,“data15”],
[“footer.row2.col1.text”,“data16”],
[“footer.row2.col2.title”,“data17”],
[“footer.row2.col2.text2”,“data18”],
[“footer.row2.col3.title”,“data19”],
[“footer.row2.col3.text”,“data20”],
[“footer.row3.col1.title”,“data22”],
[“footer.row3.col1.text”,“data23”],
[“footer.row3.col2.title”,“data24”],
[“footer.row3.col2.title”,“data25”],
[“footer.row3.col2.text”,“data26”],
[“footer.row3.col3.title”,“data27”],
[“footer.row3.col3.text”,“data28”],
[“footer.row4.col1.title”,“data29”],
[“footer.row4.website”,“data30”],
[“footer.row4.website link”,“data31”],
[“footer.row4.email”,“data31”],
[“footer.row4.privacy”,“data32”],
[“footer.row4.privacy link”,“data33”],
[“footer.row4.adr”,“data34”],
[“footer.row4.adr2”,“data35”],
[“other.short.des”,“data36”],
[“其他.促销视频”,“数据37”],
];
//控制台日志(数据);
数据。排序(按字母顺序);//按字母顺序排序我们的2D数组
CreateAndDisplayJson(数据);
//从Keys Trad数据创建JSON文件
函数CreateAndDisplayJson(GetKeysTraductionArrayData){
var lenght=GetKeysTraditionArraydata.length;
var output=“{\n”;
对于(变量i=0;i1){//,则需要缩进键
var closeBraket=“”;
var spating=“;//Json缩进
var saveSpacingTab=[];//结束缩进
对于(j=0;j B)返回1;
返回0;

}
您可以使用
forEach
循环和内部
split
每个键,然后使用
reduce
为每个键构建嵌套结构

var data=[“Key”,“data1”],[“header.title”,“data2”],[“header.tag1”,“data3”],[“header.tag2”,“data4”],[“body.text”,“data5”],[“updates.title”,“data6”],[“updates.text”,“data7”],[“footer.title”,“data8”],[“footer.row1.col1.title”,“data9”],[“footer.row1.col1.text”,“data10”],[“footer.row1.col2.title”,“data11”,“data1.footer.col1.text”],[“col2”[“footer.row1.col3.title”、“data13”]、[“footer.row1.col3.text”、“data14”]、[“footer.row2.col1.title”、“data15”]、[“footer.row2.col1.text”、“data16”]、[“footer.row2.col2.title”、“data17”]、[“footer.row2.col2.text2”、“data18”]、[“footer.row2.col3.title”、“data19”、[“footer.row2.col3.col3.text”、“data20”、[“footer.col1.col2.col1”、“row1.col1.text”…”数据23“],[“footer.row3.col2.title”,“数据24”],[“footer.row3.col2.title”,“数据25”],[“footer.row3.col2.text”,“数据26”],[“footer.row3.col3.title”,“数据27”],[“footer.row3.col3.text”,“数据28”],[“footer.row4.col1.title”,“数据29”],[“footer.row4.website”,“数据30”],[“footer.row4.website link”,“数据31”],[“footer数据32“],[“footer.row4.privacy link”,“数据33”],[“footer.row4.adr”,“数据34”],[“footer.row4.adr2”,“数据35”],[“other.short.des”,“data36”],[“other.promovideo”,“data37”]
让结果={}
data.forEach(([key,value])=>{
键。拆分('.')。减少((r,k,i,arr)=>{
返回r[k]| |(r[k]=arr[i+1]?{}:value)
},结果)
})

console.log(result)
您可以使用
forEach
循环和内部
split
每个键,然后使用
reduce
为每个键构建嵌套结构

var data=[[“Key”,“data1”],[“header.title”,“data2”],[“header.tag1”,“data3”],[“header.tag2”,“data4”],[“body.text”,“data5”],[“updates.title”,“data6”],[“updates.text”,“data7”],[“footer.title”,“data8”],[“footer.row1.col1.title”,“data9”],[“footer.row1.col1.text”,“data10”],[“footer.row1.col2.title”,“data11”,[“footer.col1.text”,“col1.col2”[“col2”],”footer.row1.col3.title、“数据13”]、[“footer.row1.col3.text”、“数据14”]、[“footer.row2.col1.title”、“数据15”]、[“footer.row2.col1.text”、“数据16”]、[“footer.row1.col3.title”、“数据17”]、[“footer.row2.col2.text2”、“数据18”]、[“footer.row2.col3.title”、“数据19”、[“footer.row2.col3.col1.text”、“数据20”、[“footer.row2.col1.col2.col1”]、“col1.text”、[“col3.col1”]、“col3数据23“],[“footer.row3.col2.title”,“数据24”],[“footer.row3.col2.title”,“数据25”],[“footer.row3.col2.text”,“数据26”],[“footer.row3.col3.title”,“数据27”],[“footer.row3.col3.text”,“数据28”],[“footer.row4.col1.title”,“数据29”],[“footer.row4.website”,“数据30”],[“footer.row4.website link”,“数据31”],[“footer数据32“],[“footer.row4.privacy link”,“数据33”],[“footer.row4.adr”,“数据34”],[“footer.row4.adr2”,“数据35”],[“other.short.des”,“data36”],[“other.promovideo”,“data37”]
让结果={}
data.forEach(([key,value])=>{
键。拆分('.')。减少((r,k,i,arr)=>{
返回r[k]| |(r[k]=arr[i+1]?{}:value)
},结果)
})

console.log(结果)
含有
还原剂的非三元溶液:

const data = [["Key","data1"],["header.title","data2"],["header.tag1","data3"],["header.tag2","data4"],["body.text","data5"],["updates.title","data6"],["updates.text","data7"],["footer.title","data8"],["footer.row1.col1.title","data9"],["footer.row1.col1.text","data10"],["footer.row1.col2.title","data11"],["footer.row1.col2.text","data12"],["footer.row1.col3.title","data13"],["footer.row1.col3.text","data14"],["footer.row2.col1.title","data15"],["footer.row2.col1.text","data16"],["footer.row2.col2.title","data17"],["footer.row2.col2.text2","data18"],["footer.row2.col3.title","data19"],["footer.row2.col3.text","data20"],["footer.row3.col1.title","data22"],["footer.row3.col1.text","data23"],["footer.row3.col2.title","data24"],["footer.row3.col2.title","data25"],["footer.row3.col2.text","data26"],["footer.row3.col3.title","data27"],["footer.row3.col3.text","data28"],["footer.row4.col1.title","data29"],["footer.row4.website","data30"],["footer.row4.website-link","data31"],["footer.row4.email","data31"],["footer.row4.privacy","data32"],["footer.row4.privacy-link","data33"],["footer.row4.adr","data34"],["footer.row4.adr2","data35"],["other.short.des","data36"],["other.promovideo","data37"]]

const result = data.reduce((all, [keys, val]) => {

    keys.split('.').reduce((obj, key, i, arr) => {

        if (i === arr.length - 1) {
            obj[key] = val;
        } else {
            if (!obj.hasOwnProperty(key)) {
                obj[key] = {};
            };
        }

        return obj[key];

    }, all);

    return all;

}, {});

console.log(result);

含有
还原剂的非三元溶液

const data = [["Key","data1"],["header.title","data2"],["header.tag1","data3"],["header.tag2","data4"],["body.text","data5"],["updates.title","data6"],["updates.text","data7"],["footer.title","data8"],["footer.row1.col1.title","data9"],["footer.row1.col1.text","data10"],["footer.row1.col2.title","data11"],["footer.row1.col2.text","data12"],["footer.row1.col3.title","data13"],["footer.row1.col3.text","data14"],["footer.row2.col1.title","data15"],["footer.row2.col1.text","data16"],["footer.row2.col2.title","data17"],["footer.row2.col2.text2","data18"],["footer.row2.col3.title","data19"],["footer.row2.col3.text","data20"],["footer.row3.col1.title","data22"],["footer.row3.col1.text","data23"],["footer.row3.col2.title","data24"],["footer.row3.col2.title","data25"],["footer.row3.col2.text","data26"],["footer.row3.col3.title","data27"],["footer.row3.col3.text","data28"],["footer.row4.col1.title","data29"],["footer.row4.website","data30"],["footer.row4.website-link","data31"],["footer.row4.email","data31"],["footer.row4.privacy","data32"],["footer.row4.privacy-link","data33"],["footer.row4.adr","data34"],["footer.row4.adr2","data35"],["other.short.des","data36"],["other.promovideo","data37"]]

const result = data.reduce((all, [keys, val]) => {

    keys.split('.').reduce((obj, key, i, arr) => {

        if (i === arr.length - 1) {
            obj[key] = val;
        } else {
            if (!obj.hasOwnProperty(key)) {
                obj[key] = {};
            };
        }

        return obj[key];

    }, all);

    return all;

}, {});

console.log(result);

我讨厌多次读同一句话,让我觉得自己快疯了。
目前,我只能显示。…
也许你可以告诉我们数组的大小