查询dict的JSON列表

时间:2013-05-10 07:00:26

标签: json

[{"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文件。这是一个词典列表。我想选择一个时间并找到与那个时间相关的值。我不知道我的列表中的时间位置只有时间的值。有没有办法可以说,时间136804,让x =价格?或者我应该遍历每个值?我也想在数学函数中使用这个值(x)。

我的第一个想法是通过遍历每个项目并在循环中检查匹配的时间值来使用暴力。

这是最好的方式吗?

2 个答案:

答案 0 :(得分:0)

查看我们用来查询JSON的SpahQL http://danski.github.io/spahql/,以便选择值并随后根据需要进行更改。

答案 1 :(得分: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/