2017-07-06 3 views
0

das folgende JSON-Array Betrachten zurückgegeben von einer Anfrage an einen Elasticsearch Cluster gesendet:griffen Schlüssel von JSON-Array ohne Wiederholung

[ 
    { 
     "_type": "Event example", 
     "_source": { 
      "democarrier_s": "vodafone UK", 
      "m-Ecosystem_s": "iOS", 
      "demo-application": "demo", 
      "demo-country-code": "GB" 
     } 
    }, 
    { 
     "_type": "Event example", 
     "_source": { 
      "democarrier_s": "Verizon", 
      "m-Ecosystem_s": "iOS", 
      "demo-application": "demo1", 
      "demo-country-code": "US" 
     } 
    } 
] 

ich herauszufinden versuche, wie alle eindeutigen Schlüssel aus diesem Dokument zu greifen, ohne Wiederholung und ohne Hartcodierung der Werte jeden und speichern sie in ein Objekt der folgenden Form:

columns = ['_type', '_source.democarrier_s', '_source.m-Ecosystem_s', '_source.demo-application', '_source.demo-country-code']; 

Könnte mir jemand helfen herauszufinden, wie dies zu erreichen? Ich habe versucht, das Dokument zu durchlaufen und die Schlüssel zu speichern, aber ich kann es nicht richtig herausfinden. '_type' kann fest in das columns-Objekt geschrieben werden, da es immer existiert.

Vielen Dank im Voraus für Ihre Hilfe und Zeit.

Antwort

0

Wenn es nur 2 Ebenen ist können Sie dies tun:

var data = [ 
 
    { 
 
     "_type": "Event example", 
 
     "_source": { 
 
      "democarrier_s": "vodafone UK", 
 
      "m-Ecosystem_s": "iOS", 
 
      "demo-application": "demo", 
 
      "demo-country-code": "GB" 
 
     } 
 
    }, 
 
    { 
 
     "_type": "Event example", 
 
     "_source": { 
 
      "democarrier_s": "Verizon", 
 
      "m-Ecosystem_s": "iOS", 
 
      "demo-application": "demo1", 
 
      "demo-country-code": "US" 
 
     } 
 
    } 
 
] 
 

 
var keys = []; 
 
data.forEach(function(item) { 
 

 
    for (var key in item) { 
 
    var hasProperties = false; 
 
    
 
    if (typeof item[key] !== 'string') { 
 
     
 
     for (var key2 in item[key]) { 
 
     hasProperties = true; 
 
     
 
     var keyName = key + "." + key2; 
 

 
     if (keys.indexOf(keyName) < 0) 
 
      keys.push(keyName); 
 
     } 
 
    } 
 
    
 
    if (!hasProperties && keys.indexOf(key) < 0) { 
 
     keys.push(key); 
 
    } 
 
} 
 
}); 
 

 
keys.forEach(function (k) { console.log(k) });

+0

Awesome, danke! –