2015-09-06 56 views
1
[ 

    { 

    "ID": 0, 

    "Name": "PHI" 

    }, 

    { 

    "ID": 0, 

    "Name": "ATL" 

    } 

] 

我正在使用SwiftyJSON和Alamofire。这是返回的内容。我想在我的代码中遍历这些对象中的每一个。尽管如此,我仍然无法获得这些信息。如何使用SwiftyJSON解析这种类型的JSON?

json [0] [“Name”]。string似乎返回零,我不知道为什么。 JSON对象肯定会得到JSON,当我将它打印到控制台时,它看起来和上面完全一样。

我也试过:

var name = json[0].dictionary?["Name"] 

还是零,但。

任何想法?

编辑

下面是我使用的检索JSON的代码。

Alamofire.request(.GET, "url", parameters: nil, encoding: .JSON, headers: nil).responseJSON 
{ 
    (request, response, data, error) in 
    var json = JSON(data!) 
    //var name = json[0].dictionary?["Name"] 
} 
+0

您是否尝试过打印'json [0]'? – Aks

+0

是的,json [0]也是零。 – halterdev

+0

如果json [0]为零,那么我认为格式化和/或检索有问题 – Tamarisk

回答

0

你的JSON是有效的(至少这段代码是),你的第一个方法从SwiftyJSON中检索数据是正确的。

另一方面,你展示的Alamofire片段没有为我编译,我不得不改变签名。

鉴于在评论,你说,不仅json[0]["Name"]是零,但json[0]零,我觉得你有你的数据是如何获取一个问题。

我在一个示例应用程序测试这个版本的Alamofire方法,效果不错:

Alamofire.request(.GET, yourURL).responseJSON(options: nil) { (request, response, data, error) in 
    let json = JSON(data!) 
    let name = json[0]["Name"].string 
    println(name) 
} 

enter image description here

在截图中,URL是我的本地服务器,用你的JSON复制粘贴在“test.json”中。

这个“答案”是我的评论的延伸,我需要空间来显示更多的信息.​​..

+0

嗯..如果我按照你对我的URL所做的方式格式化我的请求,它不会再返回JSON。数据是零。 – halterdev

+0

好的。那么我想我们正在使用不同版本的Alamofire。也许在你身边还有别的东西。 //我认为现在你应该多调试一下,检查每一步可能看起来不错但实际上是错误的(经典陷阱)。类似于1-验证Alamofire *单独*它返回数据。 2-确认这些数据是你有效的json。 3-你能用NSJSONSerializtion打印结果吗? 4-你可以用SwiftyJSON来做吗?等 – Moritz

+0

如果你打印的JSON对象,它看起来像你?我看起来像这样:[{“ID”:0,“Name”:“Philadelphia”},{“ID”:0,“Name”:“NFL”}] – halterdev

0

我想你可以试试这个。使用swifyJSON

  let json = JSON(data!) 

然后计数在数据中的数组元素

第一转换JSON(数据)。

   let count: Int? = json.array?.count 

之后,用循环来达到数组元素之一。

for index in 0...count-1 { 

     self.idArray.append(json[index]["ID"].stringValue) 

     self.nameArray.append(json[index]["Name"].stringValue) 
       } 

您将在“idArray”和“nameArray”中获得排序数据。尝试打印这两个数组。

0

您不必使用索引来解析数组。您可以从数组中获取单个json对象并使用它访问数据:

for (index: String, subJson: JSON) in json { 
    println("Current Index = \(index)") 

    if let _id = subJson["ID"].int { 
     println("ID = \(_id)") 
    } else { 
     println("Error ID") 
    } 

    if let _name = subJson["Name"].string { 
     println("Name = \(_name)") 
    } else { 
     println("Error Name") 
    } 
}