使用JQuery从JSON文件返回数组

Return array from JSON file with JQuery?

本文关键字:返回 数组 文件 JSON JQuery 使用      更新时间:2023-09-26

我有一个JSON文件,其中包含以下内容:[{名称:乔,编号:4},{姓名:拉尔夫,编号:76}]

简单地说,我试图创建一个函数,将其作为数组返回:

function createArray(){
    x = $.getJSON("/names.json", function(json) {
        var myArray = [];
        $.each(json, function() {   
            myArray.push(json);
        });
        return myArray;
    });
    return x;
}

这不起作用,我不确定它的哪一部分没有意义

您正在执行一个异步请求。$。getJSON不会返回回调的结果。

您需要将回调传递到createArray函数中。此外,如果JSON数据已经是一个数组,则不需要处理响应数据。

function createArray(cb){
  $.getJSON("/names.json", cb);
}

例如,你可以改变这个:

var myArray = createArray();
// Process myArray

进入这个:

createArray(function(myArray) {
  // Process myArray
});

问题是,你不能只分配网络请求的结果。当您调用getJSON时,您启动了一个网络请求,但在请求启动后,JS将继续运行其他东西。要获得异步请求的结果,您需要使用一个回调来处理该数据并对其进行处理。

正如loganofsmisth所说,您没有考虑$.getJSON是异步的,它不会返回您认为的内容(它实际上返回了一个jqXHR对象。编写代码以使用闭包处理异步性质:

function createArray(cb){
    $.getJSON("/names.json", function(json) {
        var myArray = [];
        $.each(json, function() {   
            myArray.push(json);
        });
        cb(myArray);
    });
}
createArray(function(array) {
    //your array is available here
    console.log(array);
}

您的键和值应该是Strings

[{"name":"joe", "number":4},{"name":"ralph", "number":76}]

和这个

$.each(json, function() {   
     myArray.push(json);
});

应该成为

$.each(json, function(key, val) {
      if(myArray[key] == undefined)
      {     myArray[key] = new Array();
      }
      myArray[key].push(val);
});

从'json'得到的是一个数组。试试这个,

var ar = [{
    "name": "joe",
    "number": "4"},
{
    "name": "ralph",
    "number": "76" }];

alert(ar[0].name);​

这会提醒"乔"这个名字。ar[0]是数组的第一个元素,在您的情况下,这是一个具有属性namenumber的对象。你可以用正常的方式获取/设置它们。

    var myArray = [];
    $.getJSON("/names.json", function(json) {
            myarray=json;
    });

现在myArray是一个包含对象的数组。

如果不能这样做,函数将返回promise对象,但不会返回json响应本身。只有在请求完成后,promise才会提供响应(因为请求是异步的,所以不是在函数返回之后立即提供)。

为什么不直接使用回调中的json呢?我的意思是:

function createArray(){
    $.getJSON("/names.json", function(json) {
        // Whatever you need to do with your json,
        // do it here. This code will run after  
        // createArray returns. And you can't
        // return anything from here, it's useless.
        // Actually, you don't even need the outer
        // createArray function.
    });
}