如何从外部文件 JSON 创建 JAVASCRIPT 数组

How to create JAVASCRIPT ARRAY from external file JSON

从 json 文件创建 javascript 数组的最佳方法是什么? 我有四个空的 JavaScript 数组,我想用从 json 文件导入的数据填充它们。

var firstname = new Array();
var address= new Array();
var city = new Array();

文件 Json : "file.json"

[
{"name ": "John", "address": "350 Fifth Avenue", "city ": "New York"},
{"name ": "Mark", "address": "1101 Arch St", "city ": "Philadelphia"},
{"name ": "Jack", "address": "60th Street", "city ": "Chicago"}
]

我试试:

$.getJSON('file.json',function (data) {   

    for (var i = 0; i < data.length; i++) {
        firstname.push.apply( firstname, data[i].firstname );
        address.push.apply( address, data[i].address );
        city.push.apply( city, data[i].city );
    }

});

但数组仍然是空的。 提前致谢

==================================已解决============ ===================

$.ajax({
    async: false,
    url: 'file.json',
    data: "",
    accepts:'application/json',
    dataType: 'json',
    success: function (data) {
        for (var i = 0; i < data.length; i++) {
            firstname.push( data[i].firstname );
            address.push( data[i].address );
            city.push( data[i].city );
        }
    }
})
// Get arrays outside callback function
console.log('result: '+firstname.length); // result: 3

你有两三个问题。

您的JSON无效。

去掉它外面的引号。

认真考虑给一个 .json 文件扩展名,那么您更有可能获得 JSON 的正确 MIME 类型。 (JSON 数据文件不是 JavaScript 程序)。


文件 Json : "data.json"

[
{"name ": "John", "address": "350 Fifth Avenue", "city ": "New York"},
{"name ": "Mark", "address": "1101 Arch St", "city ": "Philadelphia"},
{"name ": "Jack", "address": "60th Street", "city ": "Chicago"}
]

您访问数据的顺序有误

这过于复杂并且以错误的顺序访问属性。

name.push.apply(name, data.name[i]);

忘记使用 apply。你不需要它。

然后请注意,您的 JSON 数组包含对象,而不是相反。您需要访问 属性 名称之前的数组索引:

name.push(data[i].name);

记住 Ajax

中的 A

最后 - 您的代码没有显示您是如何测试结果的。请记住 Ajax 是异步的,因此如果您在回调函数之外检查数组的值,它们可能尚未填充。

你好像顺序错了,data是数组所以不是

data.name[i]

但是

data[i].name

并删除奇怪的 apply 它将是

$.getJSON('json.js',function (data) {   
    for (var i = 0; i < data.length; i++) {
        name.push( data[i].name );
        address.push( data[i].address );
        city.push( data[i].city );
    }
});

另请注意,name 是全局上下文中变量名的错误选择。