2015-04-15 33 views
2

我在使用Swift的iOS中工作。我使用返回以下JSON服务(切断为节点开始重复):用swiftlyJSON解析带有未知根元素的JSON

{ 
     "Ambler Departures: April 15, 2015, 2:57 pm": [ 
     { 
      "Northbound": [ 
      { 
       "direction": "N", 
       "path": "R5N", 
       "train_id": "564", 
       "origin": "Frazer Yard", 
       "destination": "Colmar-Link Belt", 
       "status": "On Time", 
       "service_type": "LOCAL", 
       "next_station": "North Broad St", 
       "sched_time": "Apr 15 2015 03:27:00:000PM", 
       "depart_time": "Apr 15 2015 03:27:00:000PM", 
       "track": "2", 
       "track_change": null, 
       "platform": " ", 
       "platform_change": null 
      }, 
      { 
       "direction": "N", 
       "path": "R5N", 
       "train_id": "6566", 
       "origin": null, 

注意,根节点由service--动态创建的,我不知道有一个方法是什么用户可以选择从五十个站中的一个站离开,并且时间基于服务器上的时间,这可能与用户时钟的时间不一致。

我想从北行数组中提取数据,然后在JSON中降低南行数组。

我得到从服务返回的数据,但我无法正确解析。我无法越过根节点(动态的)到达结构里面。

这里就是我想:

let json = JSON(data:data) 
var x = 0 
while x < json.count 
    { 
     let track = json[0]["Northbound"][x]["track"].string     
     println(track) 
     x++ 
    } 

这将导致 “无”。我被卡住了......

我知道json [0]可能是错误的,因为JSON的级别不是数组。在此先感谢

回答

3

如果json是从SwiftyJSON一个JSON对象,但你知道这是一个未知的关键一本字典,你可以找到以下注册表项:

let theKey = json.dictionary!.keys.first 

然后访问数组:

let theArray = json[theKey] as! [[String:AnyObject]] // array of dictionaries 

然后theArray[0]将是“Northbound”作为关键字的字典,其中包含包含信息的字典数组。

(编辑,以反映特定SwiftyJSON正确答案。)

+0

我明白你说的话在这里......但是“钥匙”无法识别。我不认为在swiftlyJSON库中“键”是JSON类的一部分。 –

+0

也许它是作为'NSDictionary'创建的?在这种情况下,您可以将其转换为Swift字典。然后你就可以使用这个'keys'方法。 (你可以在'json'上做ALT + CLICK来知道它的类型) – Moritz

+0

也许我在这里做错了什么,但是类型是JSON。弹出的声明是让json:JSON。我认为你在写作轨道上。按住Alt的同时单击JSON,我可以声明公共结构JSON。我使用的库强烈推荐,我没有解析没有这种不规则性的JSON。再次感谢您的帮助。 –