如何使用jQuery在单个传递中迭代嵌套的JSON?

时间:2014-05-27 21:49:25

标签: javascript jquery json

我有一个大型JSON文件,下面是该文件的片段。请忽略这些值,因为它们仅用作此问题的占位符。

"restaurants":[
            "name": "Burger King",
            "location": "Seattle, WA",
            "latitude":  0.000,
            "longitude": 0.0000,
            "server": "BKSEATAC1",
            "serverAddress": "127.0.0.1",
            "taskNames": ["BurgerOne","BurgerTwo","BurgerThree"],
            "currentTasks": ["BurgerOne"],
            "tasks": [                       {"name":"BurgerOne","owner":"Tom","startTime":"11:00","endTime":"11:05","duration":"5"},

使用jQuery,我能够遍历“餐馆”并以下列方式设置变量值:

$.getJSON('json/DATA.json', function(data) {
  $.each(data.restaurants, function(key, val) {
    var restaurantName = this.name;
    var restaurantLocation = this.location;

(请注意,上面的代码只是一个代码段)

要从“任务”开始迭代“内部”JSON,我使用以下代码

$.getJSON('json/DATA.json', function(data) {
  $.each(data.restaurants, function(key, val) {
    $.each(val.tasks, function(i, j){
    var taskName = this.name;
    var taskOwner = this.owner;

(另一个片段)

我遇到的问题是,如果我合并代码,变量会在第一次迭代中正确分配,而不是第二次迭代。循环遍历“餐馆”,然后执行脚本中的其余代码,然后只迭代“任务”。我需要在第一遍中设置的所有变量。任何提示或建议将不胜感激。

提前致谢!

1 个答案:

答案 0 :(得分:4)

如果您希望外部范围位于内部范围内,则需要将引用存储在变量中。我通常使用me作为名称,但它只是一个名称

$.getJSON('json/DATA.json', function(data) {
 $.each(data.restaurants, function(key, val) {
  var me = this;//save `this` reference
  $.each(val.tasks, function(i, j){
   var restaurantName = me.name;//use `this` from outer scope
   var restaurantLocation = me.location;//use `this` from outer scope
   var taskName = this.name;
   var taskOwner = this.owner;