javascript - 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 行?
解决方案
无论 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
推荐阅读
- tensorflow - 在 Anaconda3 中运行 TensorFlow
- kivy - KivyMD > MDRaisedButton > 调整字体大小以适应 MDRaisedButton
- python - 为什么这会返回从低到高的数字总和?
- c# - 当 SelectedItem 绑定到模型源并且 ItemsSource 绑定到模型选项时,SelectedIndex 不起作用
- tailwind-css - 为什么顺风css没有效果?
- swiftui - 是否可以使用 SwiftUI 中的 NavigationView 替换 iPad 导航栏中的默认后退按钮和侧边栏图标?
- python - 打开 cv 不会视频捕获 IP 摄像机
- javascript - 对对象使用 getter/setter 有什么意义吗?
- node.js - 在移动下一步之前等待 api 响应 - nodejs
- postgresql - 带有 where 子句“COLUMN_1 为空”的 PostgreSQL 选择查询挂起