【问题标题】:How to create JAVASCRIPT ARRAY from external file JSON如何从外部文件 JSON 创建 JAVASCRIPT ARRAY
【发布时间】:2015-05-14 10:51:55
【问题描述】:

从 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

【问题讨论】:

    标签: javascript jquery arrays json getjson


    【解决方案1】:

    你的顺序好像错了,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 是全局上下文中变量名的错误选择。

    【讨论】:

    • 谢谢@adameo,我为分心表示歉意。我按照您的报告更正了代码,但数组仍然为空
    【解决方案2】:

    你有两三个问题。

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

    【讨论】:

    • 他的 AJAX 很好,q.v. this tutorial 大概运行正常。
    • @TimBiegeleisen — 这似乎与我提到的任何一点无关。
    • 谢谢@TimBiegeleisen。我非常感谢您的回答,非常详细,尤其是最后一点。 如何在回调函数之外使用数组?
    • @Quentin 谢谢!解决了!
    猜你喜欢
    • 2016-03-29
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多