2016-04-21 20 views
-1

JSONデータをjavascriptの3レベル多次元配列に変換する際に助けが必要です。私の私はJSON形式で検索がこのようなコード:JSONデータをJavaScriptの3レベル多次元配列に変換するのに助けが必要です

[ 
{'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'} 
] 

しかし、私はこの形式でそれを必要とする:

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

どこから元のJSON文字列を取得しますか?あなたは何とかそれを生成するのですか、それとも他の場所からそれを取得しますか? – RiggsFolly

+0

ええ、これは奇妙な見た目のJSONデータです。実際には有効ではありませんが、キーの値を持たないオブジェクトを持つことはできません。 –

+0

Jon Koopsは、完全に無効なJSONということについて100%正解です。必要な形式でデータを入手できる場合は、常に最善の方法です。 – hvchris

答えて

0

データが伝わってくるどのように私は強くあなたが変更助言します。つまり、オブジェクトブラケットの代わりに配列ブラケットを入力するという意味で、私はあなたの質問にJSBinソリューションを提供しました。

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

鍵があるのは残念です。私は記憶からタイピングしていた。私はその記事を編集した。しかし、それはない[息子のデータを開始する。私はPHPのjson_encode関数を使用しています。これはデータベースからのものです – sjw0525

+0

ありがとうございます。 – sjw0525

1

だから、それはあなたにJSONを与えるために、このようになります

Plunkerたい:http://plnkr.co/edit/Nx4hrAex8JCCbnYG5X3t?p=preview

EDIT新しいフォーマットで動作するように編集された

を。

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

恐ろしい!どうもありがとうございます。魅力的な作品! – sjw0525

関連する問題