从Javascript数组创建JSON对象

red*_*lue 1 javascript json

因此,对于每个选中的复选框,我都会获取关联的ID,并根据其中的值推导出节点值,这很好。我面临的问题是使用所有复选框中的值创建正确的javascript对象。

这是功能

function finlizeJParams()
                    {
                        var jsonOutput=[];
                        var array =  $("input[type='checkbox']:checked").map(function(){ 

                            var str=this.id;

                            var data=[];
                            var objID=str.substring(str.lastIndexOf("c_")+2,str.lastIndexOf("_n_"));
                            var objName=str.substring(str.lastIndexOf("_n_")+3,str.lastIndexOf("_p_"));
                            var objParentID=str.substring(str.lastIndexOf("_p_")+3,str.lastIndexOf("_pn_"));
                            var objParentName=str.substring(str.lastIndexOf("_pn_")+4);

                            data['ItemID']=objID;
                            data['ItemName']=objName;
                            data['ItemParentID']=objParentID;
                            data['ItemParentName']=objParentName;
                            jsonOutput.push(data)

                            return jsonOutput;
                        }).get()

                        JSON.stringify(array);
                    }
Run Code Online (Sandbox Code Playgroud)

当我尝试在控制台上打印数组时,这似乎正在起作用,因为我正在获取数组,请参见下文

0: Array[0]
    ItemParentName: "Fruit"
    ItemParentID: "7"
    ItemID: "8"
    ItemName: "Apple"
1: Array[0]
    ItemParentName: "Fruit"
    ItemParentID: "7"
    ItemID: "9"
    ItemName: "Orange"
Run Code Online (Sandbox Code Playgroud)

但是,如果我执行JSON.stringify(jsonOutput)则会得到空数组[[],[]]?我究竟做错了什么?另外,如何将这些数组按parentID / Name分组,然后转换为JSON对象?

Que*_*tin 5

您将数组视为普通对象。

虽然数组从对象继承,但它们是为数字索引的顺序数据而设计的,当您将它们传递给时,仅包含具有数值的属性JSON.stringify

如果要使用命名键,请使用对象({}),而不是数组([])。

var data={};
Run Code Online (Sandbox Code Playgroud)