如何使用jQuery或JavaScript动态获取JSON数组键和值
我在下面介绍了JSON,我面临着从JSON数组动态获取密钥和值的困难:如何使用jQuery或JavaScript动态获取JSON数组键和值,javascript,jquery,json,Javascript,Jquery,Json,我在下面介绍了JSON,我面临着从JSON数组动态获取密钥和值的困难: var productJSON = { "byProduct": { "category": { "Entertainment": { "TV": 7, "Speaker": 24, "DVD Player": 5, "Home Theater": 4
var productJSON = {
"byProduct": {
"category": {
"Entertainment": {
"TV": 7,
"Speaker": 24,
"DVD Player": 5,
"Home Theater": 4
},
"Home": {
"Sofa Couch": 1,
"TV Furniture": 4
},
"Mobile": {
"iPhone 5s": 1,
"Accessories": 4
}
}
}
}
我需要每个类别的键和值,并放入两个不同的数组中,一个用于产品名称,另一个用于产品计数,如:
["TV", "Speaker", "DVD Player", "Home Theater","Sofa Couch", "TV Furniture", "iPhone 5s", "Accessories"]
[7, 24, 5, 4,1,4,1,4]
有人能帮忙吗?我怎样才能得到这样的输出
如何从上面的JSON数组中获取这些值,下面是我的代码,但无法解析每个类别中的所有项:
var ProductJSON = productJSON.byProduct;
var productsName = [], productCount = [];
Object.keys(ProductJSON.category).forEach(function (v) {
var k = Object.keys(ProductJSON.category[v])[0];
productsName.push(k);
productCount.push(ProductJSON.category[v][k]);
});
console.log(productsName);
console.log(productCount);
提前感谢您的帮助。这是这方面的完整解决方案
这是纯JavaScript。您可以使用lodash执行以下操作:
var productJSON={“副产品”:{“类别”:{“娱乐”:{“电视”:7,“扬声器”:24,“DVD播放器”:5,“家庭影院”:4},“家庭”:{“沙发沙发”:1,“电视家具”:4},“手机”:{“iPhone 5s”:1,“配件”:4}};
var Products=productJSON.byProduct.category;
var productsName=[],
productCount=[];
_.forEach(产品、功能(项目){
_.forEach(项目、功能(v、k){
产品名称推送(k);
productCount.push(v);
});
});
log('productsName:',productsName);
log('productCount:',productCount)代码>
基本上你已经掌握了。但由于某些原因,您只获取了第一个产品名Object.keys(ProductJSON.category[v])[0]
。删除[0]
将为您提供所有产品名称。但它不会为所有产品提供计数:(您还必须迭代Object.keys(ProductJSON.category[v])
。或者简单地使用for/in
循环:for(ProductJSON.category[v]中的var k]){productsName.push(k);productCount.push(ProductJSON.category[v][k]);}
。谢谢Felix!它起作用了。只需注意:您处理的是JavaScriptarray
和object
,而不是JSON
,尽管它们看起来非常相似。
var Products = productJSON.byProduct.category;
var productsName = [], productCount = [];
for (var product in Products) {
var items = Products[product]
for (var item in items) {
productsName.push(item);
productCount.push(items[item]);
}
}
console.log(productsName);
console.log(productCount);