使用swiftlyJSON在Swift中解析带有未知根元素的JSON

时间:2015-04-15 19:09:03

标签: ios json swift

我使用Swift在iOS上工作。我正在使用的服务返回以下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,

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

我想从北向数据中提取数据,然后在JSON中提取较低的南向数据。

我从服务中获取数据但我无法正确解析。我无法通过根节点(动态节点)进入内部结构。

这是我正在尝试的内容:

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

这导致&#34; nil&#34;。我被卡住了......

我知道json [0]可能是错误的,因为JSON的级别不是数组。提前致谢

1 个答案:

答案 0 :(得分:3)

如果json是来自SwiftyJSON的JSON对象,但您知道它是带有未知密钥的字典,您可以通过以下方式找到此密钥:

let theKey = json.dictionary!.keys.first

然后访问数组:

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

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

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