如何从外部文件JSON创建JAVASCRIPT ARRAY

时间:2015-05-14 10:51:55

标签: javascript jquery arrays json getjson

从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

2 个答案:

答案 0 :(得分:5)

您似乎订单有误,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是全局上下文中变量名称的错误选择。

答案 1 :(得分:1)

你有两三个问题。

您的JSON无效。

从中删除引号。

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

文件Json:&#34; data.json&#34;

[
{"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是异步的,因此如果您在回调函数之外检查数组的值,它们可能尚未填充。