我如何读取Json文件并在数组中存储一些数据,然后在读取文件后访问它
how do I read a Json File and store some data in an array and then later after reading the file access it?
如下面的代码所示,我试图读取Json文件并将Json文件中的一些值推入数组,如果在函数内访问该数组,则该值被正确存储
但是当回调函数结束时,数组为空为什么数组不包含推入的值?
var latArray = new Array();
var longArray = new Array();
var getLatLong = d3.json("./SRC/ratp_2013.json", function (error, data){
for(i in data.stops)
{
longArray.push(data.stops[i].longitude);
latArray.push(data.stops[i].latitude);
}
console.log(longArray); //Prints the Array of latitudes
console.log(latArray); //Prints the Array of longitudes
});
console.log(longArray); //Prints an empty array.
console.log(latArray); //Prints an empty array.
这肯定是一个异步调用。
您的控制台是否先打印空数组,然后再打印填充的数组?
如果它是一个异步调用,也应该有一个'onDataLoaded'事件。
发生这种情况是因为调用的异步性质。程序的执行将不会等待响应,并从下一行开始执行。您可以在链接中找到更多详细信息:D3 API
因此,在这种情况下,您可以使用以下任何一个选项来获得所需的结果:
-
在回调函数中编写代码
-
使用功能链(即在获得响应后可以进行呼叫)
这与执行时间有关。
JSON调用是异步的。这意味着浏览器不会等待它。
你的执行路径看起来像这样:
- 定义数组
- 调用JSON
- console.log数组
- 接收JSON
- 将信息放入数组
试试这个:
var latArray = new Array();
var longArray = new Array();
var getLatLong = d3.json("./SRC/ratp_2013.json", function (error, data){
for(i in data.stops)
{
longArray.push(data.stops[i].longitude);
latArray.push(data.stops[i].latitude);
}
logArrays();
});
function logArrays() {
console.log(longArray); //Prints an empty array.
console.log(latArray); //Prints an empty array.
}
执行路径为:
- 定义数组
- 调用JSON
- 接收JSON
- 将信息放入数组 呼叫记录功能
- console.log数组
因为:
console.log(longArray); //Prints an empty array.
console.log(latArray); //Prints an empty array.
在
之前运行var getLatLong = d3.json("./SRC/ratp_2013.json", function (error, data){
for(i in data.stops)
{
longArray.push(data.stops[i].longitude);
latArray.push(data.stops[i].latitude);
}
console.log(longArray); //Prints the Array of latitudes
console.log(latArray); //Prints the Array of longitudes
});
传递给d3的函数。Json是异步执行的
如果你像这样重写它,它应该可以工作:
function logResult() {
console.log(longArray);
console.log(latArray);
}
var getLatLong = d3.json("./SRC/ratp_2013.json", function (error, data){
for(i in data.stops)
{
longArray.push(data.stops[i].longitude);
latArray.push(data.stops[i].latitude);
}
logResult()
});
我猜d3.json
是一个异步函数。
这意味着一旦您的d3.json
函数启动,console.log
函数也会启动。他们都是并排射击的。
因此,当文件被读取时,您正在调用这些console.log
s。
您可以:
- 使用回调内部的数据 创建
Promise
(ES6)…var d3Action = new Promise(function(resolve, reject){
var latArray = [],
longArray = [],
getLatLong = d3.json("./SRC/ratp_2013.json", function (error, data){
for(i in data.stops) {
longArray.push(data.stops[i].longitude);
latArray.push(data.stops[i].latitude);
}
resolve(longArray, latArray);
});
});
d3Action.then(function(longArray, latArray){
console.log(longArray, latArray)
})
相关文章:
- Javascript:检测文件读取器中是否有图像
- 从多个文件中推送文本的函数(使用html5文件读取器上传)返回数组
- 从d3.js中的文件读取json数据不起作用
- Javascript文件读取器
- 从外部javascript文件读取var并将其转换为php变量
- 在jQuery/JS中将文件读取为字符串
- Chrome应用程序:从服务器上的文件读取和写入数据
- 文件读取器无法在chrome和IE中工作
- 将节点.js对象设置为从文件读取的数据
- Django从通过网站上传的文件读取
- 在文件读取器中追加的订单问题
- 从 JavaScript 中的本地 JSON 文件读取时出错
- 是否有可能使用三个.js文件读取STEP文件
- 将文件读取到 blob 并以 JavaScript 格式显示
- 文件读取器和 Blob 的关闭编译器警告 - 无法修复它
- 使用 knex 从文件读取并插入数据库结束错误
- Corodva 文件读取执行成功和失败回调
- 文件读取器 JS 抛出对象正忙于读取 blob
- 承诺在 NodeJS 中循环和文件读取
- 无法弄清楚 $.get 上的回调以将文本文件读取到数组中