读取JSON文件并转换为数组

时间:2016-09-08 14:51:15

标签: javascript arrays json d3.js

我的 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文件并将其存储到全局变量中(不仅仅是在函数局部变量中)。谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

例如,在回调中,您只需map data数组即可获得所需的结果(一旦d3.json在SO片段中无效,我正在使用变量在这里):

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});
});