首页 > 解决方案 > Javascript GET没有获取整个json文件

问题描述

我有我认为的大型 JSON 文件,其中我的 javascript 代码没有提取所有数据。我知道这一点是因为在 FireFox 的开发人员工具的 Network 选项卡中,它指出它在 57,301 处接收到数据标记的结尾,但文件中有 528,342 行 JSON。

我试图只获取,但我不断收到有关“等待”需要异步使用的错误,但我不熟悉异步函数的工作原理。在我的 xmlhttp 请求中,我将异步标志设置为 false。这是我可以让它与我正在运行的代码一起工作的唯一方法。

我正在拉入具有纬度、经度和高度的 json 对象。我的 JSON 格式如下:

{"points":[
{"lat": 0, "lon": 0},
.
.
.
{"lat": 0, "lon": 0}]}

我的请求是这样编码的

function get_json_data(){
var data = [];
var response = new XMLHttpRequest();
response.onreadystatechange = function(){

     data_points = JSON.parse(this.responseText);
     *** CONVERTING LAT/LON TO ARRAY AND PUTTING INTO DATA ***

});
response.open("GET", "http://url/path/to/json", false);
response.send();

return data;
}

它适用于不是那么大的 JSON 文件,可能有 10,000 行。我怎样才能让它与一个更大的 JSON 文件一起工作,超过 500,000 行?

标签: javascriptjsoncoordinate-systems

解决方案


无论 JSON 大小如何,我认为这样的事情最好异步处理,因为您是从外部源(API、文件系统等)加载它。所以我建议你fetch()再试一次。遗憾的是,由于安全原因,jsbin 和 jsfiddle 不允许我调用外部 API,所以我无法制作交互式演示,但代码应如下所示:

async function getData() {

    const response = await fetch('<url here>');
    const json = await response.json();

    // Do stuff with JSON

}

========== OR ==========

function getData() {

    fetch('<url here')
        .then(res => res.json())
        .then(data => {
            doStuffWithData(data);
        });

}

基本上,Fetch API 返回一个响应,您需要对其进行处理(例如检查状态是否为 200 OK,请参阅https://developers.google.com/web/updates/2015/03/introduction-to-fetch) . 在您的情况下,您需要在确保请求成功后将响应转换为 JSON 对象,然后操作该 JSON。

对于非常大的文件,您可能需要查看 Streams。Fetch API 似乎确实支持这一点,请参见此处的使用示例:https ://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams


推荐阅读