我有以下JSON。 我正在读T3阵列。
我的问题是,是否可以读取值Can和Bottle
var jsondata = {
"T3": [
{
"Can": [
{
"type": "pepsi can 250ml"
},
{
"type": "pepsi can 100ml"
}
]
},
{
"Bottle": [
{
"type": "pepsi bottle 250ml"
},
{
"type": "pepsi bottle 100ml"
}
]
}
]
};
我同意,据我所知,我无法从这个级别继续前进?
for(var c=0;c<jsondata.T3.length;c++)
{
}
但我仍然想问这是否可以做到?
答案 0 :(得分:1)
基本上,您现在想要使用c
变量来引用T3
数组的相关部分:
for(var c=0;c<jsondata.T3.length;c++){
var can_data = jsondata.T3[ c ][ "Can" ]; // T3[ 0 ][ "Can" ]
var bottle_data = jsondata.T3[ c ][ "Bottle" ]; // T3[ 0 ][ "Bottle" ]
}
答案 1 :(得分:1)
它是数组内的数组,所以你必须这样做:
$.each(jsondata,function(index,item){
$.each(item,function(index1,item1){
if(item1.Can)
console.log(item1.Can);
if(item1.Bottle)
console.log(item1.Bottle);
});
});
<强>更新:强>
如果您不知道数组中的对象是什么,则必须对数组进行递归迭代:
答案 2 :(得分:0)
您想使用Object.keys()
方法:
并且,您希望将其与Array.isArray()
和Array#map()
混合:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
如果您的环境/浏览器没有ECMAScript 5支持,那么您可以在此处找到多面填充:https://github.com/es-shims/es5-shim
我的方法还使用旧版JavaScript中的以下内容:
Array#concat()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat
Function#apply()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
以下是您可以使用它的方式:
var result = [];
if (Array.isArray(jsondata.T3)) {
result = result.concat.apply(result, jsondata.T3.map(function (obj) {
return Object.keys(obj); // Array of Array of Strings
}));
/* Array#concat() used with Function#apply() to reduce
an Array of Array of Strings down to an Array of Strings */
}
// now, result is Array ['Can', 'Bottle']