使用 jQuery 访问更复杂的 JSON

Accessing more complex JSON with jQuery

我正在尝试从我创建的 JSON 文件访问此数据:

{
  "game":"one",
  "schedule":[
    {
      "day":"mon",
      "start":"00:00:00",
      "end":"05:30:00"
    },
    {
      "day":"tue",
      "start":"00:00:00",
      "end":"05:30:00"
    }
  ],
  "game":"two",
  "schedule":[
    {
      "day":"mon",
      "start":"00:00:00",
      "end":"05:30:00"
    },
    {
      "day":"wed",
      "start":"00:00:00",
      "end":"05:30:00"
    }
  ],
  "game":"three",
  "schedule":[
    {
      "day":"fri",
      "start":"00:00:00",
      "end":"05:30:00"
    },
    {
      "day":"thu",
      "start":"00:00:00",
      "end":"05:30:00"
    }
  ]
}

这就是我尝试访问它的方式:

  $.getJSON(json_location, function(data) {
    $.each(data.schedule, function() {
      console.log(this.day + " " + this.start + " " + this.end);
    });
  });

然而,这只是 returns 第三场比赛中的价值 - 所以:周五 00:00:00 05:30:00,周四 00:00:00 05:30:00。理想情况下,我希望能够遍历第一场比赛,然后是第二场比赛,然后是第三场比赛。然而,无论我多么努力地调整我的代码,我都不允许 $.getJSON 访问数据。

我也知道这种格式可以与 javascript 一起使用,但根据 RFC 4627(JSON 规范)无效 - 所以关于如何改进布局的任何建议JSON 将不胜感激。

您的JSON数据有误。您有 3 个计划项目而不是 3 个包含计划的对象

[ // array of games
{ // first game and schedule
"game":"one",
"schedule":[
  {
  "day":"mon",
  "start":"00:00:00",
  "end":"05:30:00"
  },
  {
  "day":"tue",
  "start":"00:00:00",
  "end":"05:30:00"
  }
  ]
},
{ // second game and schedule
"game": "two",
"schedule": [
    ..
]
},
etc
]

您似乎已经在对象的顶层分别定义了 "game""schedule" 三次。只需修改您的 JSON 使其有意义:也许您应该有一个游戏对象数组,每个对象都有一个 "number" 和一个 "schedule" 字段。

将您的 json 代码粘贴到此站点并正确格式化。 http://json.parser.online.fr/

你是对的,这个JSON是错误的,因为同一个按键游戏和时间表有多个值

尝试这样的事情(最简单的改变)

{
  "one":[
    {
      "day":"mon",
      "start":"00:00:00",
      "end":"05:30:00"
    },
    {
      "day":"tue",
      "start":"00:00:00",
      "end":"05:30:00"
    }
  ],
  "two":[
    {
      "day":"mon",
      "start":"00:00:00",
      "end":"05:30:00"
    },
    {
      "day":"wed",
      "start":"00:00:00",
      "end":"05:30:00"
    }
  ],
  "three":[
    {
      "day":"fri",
      "start":"00:00:00",
      "end":"05:30:00"
    },
    {
      "day":"thu",
      "start":"00:00:00",
      "end":"05:30:00"
    }
  ]
}

然后像

一样迭代它
for ( var gameId in data )
{
   var scheduleArray = data[ gameId ];
//iterate this array
}