2016-09-08 17 views
0

URLにID-1があるかどうかに基づいてJSONファイルの3つの「ハウス」と「露出」をすべて取得して保存する必要がある問題が発生しました。 ID-2など。URLに渡された正しいパラメータの.JSONリスニングを正しく反復処理するループがあります。例えば、 です。 http://localhost/?houseblock=ID-1は、ID-1の内部でのみJSONを読み込みます。しかし、私は3つの「家」と「暴露」のすべての数字を後で使用するために取り出して保管する必要があります。複数の.getJsonから複数の.eachループを格納

私はこれを正しく行う方法については少し慣れていますが、私は、 "家"と "露出"をつかむために1つのループを止めてから、2番目のループで2番目の " 「住宅」と「暴露」があります。しかし、それはそうではないようです。

JSON jsonFile.json

{ 
    "ID-1":{ 
     "1-1":{ 
     "house":6, 
     "exposure":1 
     }, 
     "1-2":{ 
     "house":1, 
     "exposure":3 
     }, 
     "1-3":{ 
     "house":3, 
     "exposure":2 
     } 
    }, 
    "ID-2":{ 
     "2-1":{ 
     "house":3, 
     "exposure":2 
     }, 
     "2-2":{ 
     "house":6, 
     "exposure":5 
     }, 
     "2-3":{ 
     "house":1, 
     "exposure":1 
     } 
    } 
} 

jQueryの

$(document).ready(function() 
{ 
    // -- Listen to URL Changes --// 
    var urlListen; 
    (window.onpopstate = function() 
    { 
     var match, 
      pl = /\+/g, // Regex for replacing addition symbol with a space 
      search = /([^&=]+)=?([^&]*)/g, 
      decode = function(s) 
      { 
       return decodeURIComponent(s.replace(pl, "-")); 
      }, 
      query = window.location.search.substring(1); 
     urlListen = {}; 
     while (match = search.exec(query)) urlListen[decode(match[1])] = decode(match[2]); 
    })(); 
    var retrieveAll = $.getJSON('jsonFile.json', function(data) {}).done(function(data) 
    { 
     $(data[urlListen["houseblock"]]).each(function(i, val) 
     { 
      $.each(val, function(j, b) 
      { 
       $.each(b, function(k, v) 
       { 
        console.log(k + " : " + v); 
        if (k == "house") 
        { 
         houseObj = v; 
         houseObj2 = v; 
         houseObj3 = v; 
        } 
       }); 
      }); 
     }); 
    }).fail(function(data) 
    { 
     console.log("error"); 
    }).always(function(data) 
    { 
     console.log("complete"); 
    }); 
    retrieveAll.complete(function(data) 
    { 
     init(); 
    }); 
}); 

function init() 
{ 
    console.log(houseObj); 
    console.log(houseObj2); 
    console.log(houseObj3); 
} 

答えて

1

完全にこれはあなたが探しているものであれば確かに、しかし、次のコードを格納していないすべてのhouseexposure値をそれぞれの配列に格納します。 $.eachを使用する必要はありません。 Javascriptのネイティブmapを使用する方が簡単です。

投稿したコードから、ロジックのコンポーネントを関数getCurrentHouseBlockID(または類似のもの)に抽象化できると仮定しています。

var id = getCurrentHouseBlockID(); // 'ID-1' 
var dataForID = Object.keys(jsonData[id]); // ['1-1', '1-2', '1-3'] 
var houseNums = dataForID.map(function getHouseNum(key) { 
    return dataForID[key].house; 
}); 
var exposureNums = dataForID.map(function getExposureNum(key) { 
    return dataForID[key].exposure; 
}); 
関連する問題