Javascript 参考JSON子数据
我从数据库返回了下面的JSON。如何在不指定名称的情况下引用元素STOCK?我知道我可以使用NewDataSet.STOCK,但这个JSON是动态的 我尝试了NewDataSet[1],但它不喜欢这样。有办法参考它吗Javascript 参考JSON子数据,javascript,jquery,json,Javascript,Jquery,Json,我从数据库返回了下面的JSON。如何在不指定名称的情况下引用元素STOCK?我知道我可以使用NewDataSet.STOCK,但这个JSON是动态的 我尝试了NewDataSet[1],但它不喜欢这样。有办法参考它吗 { "NewDataSet": { "@": { "xmlns": "STOCK" }, "STOCK": { "STOCK_GROUP"
{
"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": {}
}
}
}
下面是两行或更多行的示例::
{
"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);
});
它会有多大的动力?一个属性是否始终为“@”,然后始终存在一个(且只有一个)您想要的其他属性?如果是这样,jQuery
$。每个方法都可以工作:
$.each(NewDataSet,function(index,value){
if(index !== '@'){
//do your stuff
}
});
不能使用数组索引引用对象的属性。@
属性是否始终包含名称?如果是这样,您可以使用:
var prop = NewDataSet["@"]["xmlns"];
NewDataSet[prop]["WEIGHT"] // equal to "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]; }
在解析对象属性之后,您只能对其进行迭代。始终会有@,但可能会有许多库存行。我希望使用$。在获取我的数据后,使用var data=NewDataSet[“库存”];$进行迭代。每个(数据[0],函数(索引,值){});fails@将始终包含名称,但如果有大量库存记录,NewDataSet[prop]是否会返回所有行,以便我可以循环它们?如果从数据库返回1…n行,则“库存”应为数组。您可以使用NewDataSet[prop][0]
访问一行,请参见更新的问题。您的方法适用于安全组,但不适用于库存。我看到它得到了数据,但是我的循环失败了var data=NewDataSet[“STOCK”];数据[0]未定义,但如果使用安全组,则可以使用,因为NewDataSet[“STOCK”]代码>不是数组,而是对象。如果只有一行,服务器将生成不同的代码。您应该始终返回一个数组,即使它只有一个元素,这样您就可以避免任何“特殊情况”。哇!这真是太神奇了,我想这可能是一个stringify bug,所以我们走了这条路。我不想尝试强制执行数组,因为我不知道如何检查是否为数组。您也可以根据使用数组的行实例。名称与length
冲突的可能性很低,因为字段都是大写的,所以您的方式可能会起作用。我刚刚发现,如果表没有数据,就没有@property。有没有办法让我知道它是否存在?