2016-05-23 1 views
1

Я ниже JSON, я сталкиваюсь с трудностями, чтобы получить ключ и значение динамически из массива JSON:Как получить JSON ключ массива и значение динамически с помощью JQuery или JavaScript

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); 

Спасибо за вашу помощь заранее.

+0

Вы в основном получили его. Но по какой-то причине вы только захватываете первые названия продуктов 'Object.keys (ProductJSON.category [v]) [0]'. Удаление '[0]' даст вам все имена продуктов. –

+0

Но это не дает счет для всех продуктов :( –

+0

Вы должны также перебирать 'Object.keys (ProductJSON.category [v])' или просто использовать цикл 'for/in':' for (var k в ProductJSON.category [v]) {productsName.push (k); productCount.push (ProductJSON.category [v] [k]);} '. –

ответ

2

Вот полное решение в этом fiddle.

  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); 

Это простой JavaScript.

0

Вы можете сделать что-то вроде этого, используя lodash forEach:

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}}}}; 
 

 
var Products = productJSON.byProduct.category; 
 
var productsName = [], 
 
    productCount = []; 
 

 
_.forEach(Products, function(items) { 
 
    _.forEach(items, function(v, k) { 
 
     productsName.push(k); 
 
     productCount.push(v); 
 
    }); 
 
}); 
 

 
console.log('productsName: ', productsName); 
 
console.log('productCount: ', productCount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>

Смежные вопросы