2016-05-23 11 views
1

ich unten JSON habe, Schwierigkeiten sind mit Blick auf den Schlüssel und den Wert dynamisch von JSON-Array zu erhalten:Wie JSON Array-Schlüssel und Wert erhalten dynamisch jQuery oder JavaScript mit

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

I Schlüssel mag ich, Wert zählt aus jeder Kategorie und in zwei verschiedenen gestellt hat, einen für Produktnamen und ein anderes für das Produkt wie:

["TV", "Speaker", "DVD Player", "Home Theater","Sofa Couch", "TV Furniture", "iPhone 5s", "Accessories"] 

[7, 24, 5, 4,1,4,1,4] 

kann jemand helfen, wie kann ich die Ausgabe wie diese zu erhalten?

Wie kann ich diese Werte von oben JSON-Array erhalten, unter meinem Code ist aber nicht in der Lage das Element alle aus jeder Kategorie zu analysieren:

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

Vielen Dank für Ihre Hilfe im Voraus.

+0

Sie es im Grunde haben. Aber aus irgendeinem Grund greifen Sie nur auf den ersten Produktnamen 'Object.keys (ProductJSON.category [v]) [0]'. Wenn Sie "[0]" entfernen, erhalten Sie alle Produktnamen. –

+0

Aber es gibt nicht die Anzahl für alle Produkte :( –

+0

Sie müssen iterieren über 'Object.keys (ProductJSON.category [v])' als auch. Oder einfach eine 'for/in' Schleife:' für (var k in ProductJSON.category [v]) {productsName.push (k); productCount.push (ProductJSON.category [v] [k]);} '. –

Antwort

2

Hier ist die vollständige Lösung in diesem 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); 

Dies ist in JavaScript.

0

Sie können forEach so etwas wie dieses mit lodash tun:

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>

Verwandte Themen