2016-04-21 11 views
-1

Ich brauche Hilfe beim Konvertieren von JSON-Daten in eine 3-Ebenen-multidimensionales Array in Javascript. Mein Code, den ich ein Wiederauffindungs ​​im JSON-Format wie folgt aussieht:Ich brauche Hilfe beim Konvertieren von JSON-Daten in ein mehrdimensionales 3-Ebenen-Array in Javascript

[ 
{'City':'Philadelphia','State':'Pennsylvania','Country':'United States'}, 
{'City':'Pittsburgh','State':'Pennsylvania','Country':'United States'}, 
{'City':'Harrisburg','State':'Pennsylvania', 'Country':'United States'}, 
{'City':'Sacramento', 'State':'California', 'Country':'United States'}, 
{'City':'Fremont', 'State':'California', 'Country':'United States'}, 
{'City':'Los Angeles', 'State':'California','Country': 'United States'}, 
{'City':'Sydney', 'State':'New South Wales', 'Country':'Australia'}, 
{'City':'Melbourne', 'State':'Victoria', 'Country':'Australia'} 
] 

Aber ich brauche es in diesem Format:

$scope.countries = { 
    'United States': 
    { 
     'Pennsylvania': ['Philadelphia', 'Pittsburgh', 'Harrisburg'], 
     'California': ['Sacramento', 'Fremont', 'Los Angeles'] 
    }, 
    'Australia': 
    { 
     'New South Wales': ['Sydney'], 
     'Victoria': ['Melbourne'] 
    } 
}; 
+0

Woher bekommen Sie den ursprünglichen JSON String? Generierst du es irgendwie oder bekommst du es von woanders? – RiggsFolly

+0

Ja, das sind einige seltsam aussehende JSON-Daten. Es ist eigentlich nicht einmal gültig, du kannst kein Objekt haben, das keinen Wert für seine Schlüssel hat. –

+0

Jon Koops ist 100% richtig, dass JSON vollständig ungültig ist. Es ist IMMER am besten, wenn Sie die Daten in dem Format erhalten, das Sie benötigen. – hvchris

Antwort

0

Ich würde raten Ihnen dringend ändern, wie Ihre Daten kommt durch. Nichtsdestoweniger habe ich für Ihre Frage eine JSBin-Lösung zur Verfügung gestellt, obwohl Sie Array-Klammern statt Objektklammern eingeben wollten.

https://jsbin.com/qaxubigija/edit?js,console

function dataParse() { 

    var data = [ 
    [ 'Philadelphia','Pennsylvania','United States'],  
    ['Pittsburgh','Pennsylvania','United States'], 
    ['Harrisburg','Pennsylvania', 'United States'], 
    ['Sacramento', 'California', 'United States'], 
    ['Fremont', 'California', 'United States'], 
    ['Los Angeles', 'California', 'United States'], 
    ['Sydney', 'New South Wales', 'Australia'], 
    ['Melbourne', 'Victoria', 'Australia'] 
    ]; 

    var newObject = {}; 
    for(var i = 0; i < data.length; i++) { 

    // create your references 
    var currentNode = data[i], 
     city = currentNode[0], 
     state = currentNode[1], 
     country = currentNode[2]; 

    // check that the country property exists 
    // create if it does not exist 
    if(typeof newObject[country] == 'undefined'){ 
     newObject[country] = {}; 
    } 

    // check that the state property exists 
    // create if it does not exist 
    if(typeof newObject[country][state] == 'undefined'){ 
     newObject[country][state] = []; 
    }  

    // push city to the proper array 
    newObject[country][state].push(city); 

    } 

    console.log(newObject); 

} 

dataParse(); 
+0

Es tut mir leid, es gibt Schlüssel. Ich tippte aus dem Gedächtnis. Ich habe den Beitrag bearbeitet. Aber nein, es ist [{um die Sohndaten zu starten. Ich benutze PHP json_encode Funktion. Es ist von einer Datenbank – sjw0525

+0

Vielen Dank dafür. – sjw0525

1

So wäre es etwa so aussehen Sie die JSON Sie

Plunker geben wollen: http://plnkr.co/edit/Nx4hrAex8JCCbnYG5X3t?p=preview

EDIT

Edited mit dem neuen Format zu arbeiten.

var original = [ 
{'City':'Philadelphia','State':'Pennsylvania','Country':'United States'}, 
{'City':'Pittsburgh','State':'Pennsylvania','Country':'United States'}, 
{'City':'Harrisburg','State':'Pennsylvania', 'Country':'United States'}, 
{'City':'Sacramento', 'State':'California', 'Country':'United States'}, 
{'City':'Fremont', 'State':'California', 'Country':'United States'}, 
{'City':'Los Angeles', 'State':'California','Country': 'United States'}, 
{'City':'Sydney', 'State':'New South Wales', 'Country':'Australia'}, 
{'City':'Melbourne', 'State':'Victoria', 'Country':'Australia'} 
] 
    var json = {}; 
    for(var i in original){ 
    var country = original[i].Country; 
    var state = original[i].State; 
    var city = original[i].City; 
    var obj = {}; 

    if(!json.hasOwnProperty(country)){ 
     obj[state] = [city]; 
     json[country] = obj; 
    } 
    else if(json[country].hasOwnProperty(state)){ 
     json[country][state].push(city); 
    } 
    else if(!json[country].hasOwnProperty(state)){ 
     json[country][state] = [city]; 
    } 
    } 
+0

Super! Ich danke dir sehr. Klappt wunderbar! – sjw0525

Verwandte Themen