我从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);
});
答案 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
}
});