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

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

这是最好的方法吗?

4

2 回答 2

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/

于 2014-09-25T13:25:42.923 回答
0

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

于 2014-04-30T21:36:14.067 回答