我如何使用SwiftyJSON解析这种类型的JSON?

时间:2015-09-06 02:53:48

标签: json swift alamofire swifty-json

[

  {

    "ID": 0,

    "Name": "PHI"

  },

  {

    "ID": 0,

    "Name": "ATL"

  }

]

我使用的是SwiftyJSON和Alamofire。这就是返回的内容。我想在我的代码中遍历每个对象。我收到这些信息时遇到了麻烦。

json [0] [" Name"]。字符串似乎返回nil,我不知道为什么。 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"]
}

3 个答案:

答案 0 :(得分: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"。

这个"回答"是我的评论的延伸,我需要空间来显示更多信息...

答案 1 :(得分:0)

我想你可以试试这个。

首先使用swifyJSON转换JSON(数据)

           let json = JSON(data!)

然后计算数据中的数组元素。

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

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

  for index in 0...count-1 {

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

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

您将在“idArray”和“nameArray”中获取已排序的数据。尝试打印两个阵列。

答案 2 :(得分: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")
    }   
}