如何使用getJSON分配json对象

问题描述

我想将json对象branch latlng分配给jsonData变量。
如果我用console.log jsonData.responseJSON.positions.lengthjsonData.responseJSON.positions[0].lat
,我可以很好地看到我的json数据。 console image
但是,如果我对其进行编码并运行,它将出现错误
例如,

var jsonData = $.getJSON("{% static "kia_data_brlatlng.json" %}",function(data){
    console.log(jsonData)
});

for(var i = 0; i < jsonData.responseJSON.positions.length; i++) {
    //not work
}

for(var i = 0; i < 681; i++) {
    //work
}

有人给我一个提示,它需要$.getJSON内有一个回调函数,但仍然很难找到解决方案。
任何帮助将不胜感激!

我将添加我的json文件的外观。

{
    "positions": [
      {
        "branch": "A","lat": 37.5221642,"lng": 127.0339206
      },{
        "branch": "B","lat": 35.1547587,"lng": 129.0389295
      },//and 679 more
    ]
}

解决方法

这是由于Javascript的异步特性。您必须等到得到响应。或者您可以在响应到来时编写代码。

var jsonData = $.getJSON("{% static "kia_data_brlatlng.json" %}",function(data){
    console.log(jsonData)
    for(var i = 0; i < data.responseJSON.positions.length; i++) {
      //here this will work
    }
});

或者getJSON返回承诺,因此您可以使用then来获得响应。在这里检查:function wait with return until $.getJSON is finished

,

看完json对象后,基本上是这样的

    jsonData = {
        "positions": [
          {
            "branch": "A","lat": 37.5221642,"lng": 127.0339206
          },{
            "branch": "B","lat": 35.1547587,"lng": 129.0389295
          },//and 679 more
        ]
    }

因此,如果要进行迭代,可以像这样简单地对其进行迭代

    for(var i = 0; i < jsonData.positions.length; i++) {
        //work
        console.log(jsonData.positions[i])
    }
,

这是因为getJSON函数是异步的,因此在获取jsonData变量中的数据之前执行循环。