从Javascript数组创建JSON对象

时间:2014-06-07 13:59:52

标签: 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);
                    }

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

0: Array[0]
    ItemParentName: "Fruit"
    ItemParentID: "7"
    ItemID: "8"
    ItemName: "Apple"
1: Array[0]
    ItemParentName: "Fruit"
    ItemParentID: "7"
    ItemID: "9"
    ItemName: "Orange"

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

1 个答案:

答案 0 :(得分:4)

您将数组视为普通对象。

虽然数组继承自对象,但它们是为数字索引的顺序数据而设计的,当您通过JSON.stringify传递数据时,只会包含具有数值的属性。

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

var data={};