请参阅JSON子数据

时间:2011-09-20 13:18:49

标签: javascript jquery json

我从DB返回了以下JSON。如何在不指定名称的情况下引用元素STOCK?我知道我可以做NewDataSet.STOCK,但这个JSON是动态的。

我尝试过NewDataSet [1],但不喜欢这样。有没有办法引用它?

{
    "NewDataSet": {
            "@": {
                "xmlns": "STOCK"
            },
            "STOCK": {
                "STOCK_GROUP": "Default",
                "STOCK_CODE": "qwertyuiop",
                "FEEDER_OR_TRAY_NUMBER": "1",
                "ENABLED": "Enabled",
                "WEIGHT": "1",
                "PRIORITY": "0",
                "STOCK_TYPE": "Paper",
                "STOCK_ID": "1",
                "VALID_FROM": "1900-01-01T00:00:00+00:00",
                "VALID_TO": "1900-01-01T00:00:00+00:00",
                "STOCK_IMAGE": {}
            }
        }
    }

以下是2行或更多行的示例:

{
    "NewDataSet": {
        "@": {
            "xmlns": "SECURITY_GROUPS"
        },
        "SECURITY_GROUPS": [
            {
                "GROUP_ID": "100",
                "NAME": "Administrators",
                "DESCRIPTION": "Access to all aspects of system"
            },
            {
                "GROUP_ID": "101",
                "NAME": "Operators",
                "DESCRIPTION": "users of device"
            }
        ]
    }
}

然后我运行这个javascript:

$.each(data[0], function(key, value) {
    columnArr.push({"sTitle" : key});
});

$.each(data, function(key, value) {
    var innerArr = [];
    $.each(value, function(innerKey, innerValue) {
        innerArr.push(innerValue);
    });
    alueArr.push(innerArr);
});

3 个答案:

答案 0 :(得分:1)

您不能使用数组索引来引用对象的属性。 @属性是否始终包含名称?如果是这样,你可以使用它:

var prop = NewDataSet["@"]["xmlns"];
NewDataSet[prop]["WEIGHT"] // equal to "1"

答案 1 :(得分:1)

您可以迭代关联数组中的元素,如下所示:

for (var key in NewDataSet) {
    if (obj.hasOwnProperty(key)) {
        // key holds 'STOCK', obj[key] holds the data you are after
    }
}

查看数据,他们建议您应该实际做的是明确检索'@',然后检查'xmlns',以了解您应该搜索的密钥...

---编辑后编辑,更清楚这是你需要的

var tableName = NewDataSet['@'].xmlns;
var rows = NewDataSet[tableName];
// enforce array
if (!rows.hasOwnProperty('length')) { rows = [rows]; }

答案 2 :(得分:0)

它有多动态?一个属性是否总是“@”,然后总会有一个(也是唯一一个)其他属性就是你想要的属性?如果是这样,jQuery $.each方法将起作用:

$.each(NewDataSet,function(index,value){
    if(index !== '@'){
        //do your stuff
    }
});