2013-05-10 113 views
0
[{"time":136803,"price":"1.4545","amount":"0.0885","ID":"112969"}, 
{"time":136804,"price":"2.5448","amount":"0.0568","ID":"5468489"}, 
{"time":136805,"price":"1.8948","amount":"0.0478","ID":"898489"}] 

的JSON名單上有類似上面的一個大的JSON文件。它是一個字典列表。我想選擇一個時間,並找出與那個時間相關的價值。我不知道我列表中的哪個時間位於該時間的值。有沒有辦法,我可以說,時間136804,使x =價格?或者我應該循環每個值?我也想在數學函數中使用這個值(x)。查詢字典

我的拳頭思想是通過每個項目去,並檢查它在一個循環中匹配時間值用蠻力。

這是最好的方法嗎?

+0

作爲您的數據對象的數組,你應該循環低谷。但是如果你能夠改變你的數據結構,使用帶有'time'的密鑰的地圖。如{136803:{ 「時間」:136803, 「價格」: 「1.4545」, 「量」: 「0.0885」, 「ID」: 「112969」},...} – 2014-09-25 13:46:36

回答

0

我做了一些類似的最近。我不得不查詢的JSON文件大約有6000行和大約500個JSON對象。下面給出我的查詢功能遍歷每個對象來選擇相匹配的對象,但它可以獲取幾毫秒之內的任何結果。

var data = '[{"time":136803,"price":"1.4545","amount":"0.0885","ID":"112969"},'+          '{"time":136804,"price":"2.5448","amount":"0.0568","ID":"5468489"},'+       '{"time":136805,"price":"1.8948","amount":"0.0478","ID":"898489"}]'; 

var data = JSON.parse(data); 

var query = function(data, select, andwhere) { 

     var return_array = []; 

     $.each(data, function (i, obj) { 

      var temp_obj = {};   

      var where = true; 
      if (andwhere) { 
       $.each(andwhere, function(j, wh) { 
        if (obj[wh.col] !== wh.val) { 
         where = false; 
        } 
       }); 
      } 
      if (where === false) { 
       return; 
      } 

      $.each(obj, function (j, elem) { 
       if (select.indexOf(j.trim())!==-1) { 
        temp_obj[j] = elem; 
       } 
      }); 

      return_array.push(temp_obj); 
     }); 

     return return_array; 
}; 
var result = query(data, ['price','amount'],[{"col":"time","val":136804}]); 
console.log(JSON.stringify(result)); 

http://jsfiddle.net/bejgy3sn/1/

+1

這個代碼需要jQuery的。 – Nadeeth 2014-09-25 13:26:52