【问题标题】:Reading JSON file and convert into array [duplicate]读取JSON文件并转换为数组[重复]
【发布时间】:2016-09-08 14:51:14
【问题描述】:

我有一个 JSON 文件 data.json,其内容如下:

[
   {
    "name": "Alice",
    "number": 10 
   },
   {
    "name": "Bob",
    "number": 20 
   },
   {
    "name": "Mary",
    "number": 50 
   }
]

我想读取这个 JSON 文件并将key: number 的值提取到一个数组中: number_array = [10, 20, 50]


这是我的方式:

首先我将 JSON 文件读取成一个字符串

function readTextFile(file) {
   var raw_text;
   var rawFile = new XMLHttpRequest();
   rawFile.overrideMimeType("application/json");
   rawFile.open("GET", file, true);
   rawFile.onreadystatechange = function() {
        if (rawFile.readyState === 4 && rawFile.status == "200") {
             raw_text = rawFile.responseText;
        }
    }
    rawFile.send(null);
    return raw_text;
}

但是,当我调用这个函数时,

var result = readTextFile('data.json')

无法得到正确的结果,但得到undefined


我在问如何读取 JSON 文件并将其存储到全局变量中(不仅在函数局部变量中)。谢谢。

【问题讨论】:

  • 因为您的请求是异步的(open 的第三个参数设置为true),您的意思是使用同步请求吗?
  • @PatrickEvans - 不要鼓励同步请求 - 它们已被弃用
  • @JaromandaX,不是在鼓励它,而是在问他们是否打算这样做。因为他们可能故意希望同步请求完全了解它的缺点。
  • @PatrickEvans - 也一样:p
  • 对不起。我是 Javascript 新手。看来我应该寻找异步函数的返回值?

标签: javascript arrays json d3.js


【解决方案1】:

尽管已将此问题标记为“重复”,但我相信有几点值得向 OP 提及:

首先,如果您使用的是 D3,则无需使用XMLHttpRequest 来获取 JSON。 D3 有一个功能:

d3.json("filename.json", function(data){
    //code using `data`
});

第二个也是最重要的:为什么要将 JSON 存储在全局变量中?绝对没有理由这样做。一旦d3.json 加载了你的json,你就可以在回调中做任何事情。

例如,在回调中,您可以简单地 map 和您的 data 数组来获得您想要的结果(一旦 d3.json 在 SO sn-p 中不起作用,我在这里使用了一个变量):

var data = [{"name": "Alice","number": 10},
   {"name": "Bob","number": 20},
   {"name": "Mary","number": 50}];

var newData = data.map(function(d){ return d.number});
console.log(newData);

总之,这是代码:

d3.json("filename.json", function(data){
    var newData = data.map(function(d){ return d.number});
});

【讨论】:

  • 感谢您的回复。我想将 json 存储在全局变量中,因为我可能会对数据进行一些操作。我想在线问var newData = data.map(function(d){ return d.number});,我还是不能把newData返回给主函数变量吧?
  • 您可以在d3.json 中进行任何您想要的数据操作,并且您可以创建您想要的回调数量...
  • 我对 d3 和 js 都很陌生。 js中一个函数有很多回调是不是很常见?我不明白你说的do any data manipulation you want inside d3.json是什么意思
  • d3.json 将加载您的 JSON 并创建一个名为 data 或您给它的任何其他名称的数组(在您的情况下)。你可以用任何你想要的方式操作这个数组。就是这样。我建议你研究一些示例,有几个很好的代码示例,特别是在 bl.ocks.org
  • 哦,你的意思是我应该在d3.json( )内进行所有数据操作
猜你喜欢
  • 1970-01-01
  • 2021-10-14
  • 2019-11-23
  • 1970-01-01
  • 2020-12-27
  • 2021-07-27
  • 2016-03-11
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多