在Swift 3中解析JSON响应

时间:2016-11-07 16:24:36

标签: json swift http

我有一个API端点,它以下列格式返回JSON:

[
  {
    "id": "1",
    "name": "John"
  },
  {
    "id": "2",
    "name": "Jane"
  },
  {
    "id": "3",
    "name": "Nick"
  }
]

我试图在Swift 3中解析它,但我只能找到解析JSON格式的例子:

{
"blogs": [
    {
        "needspassword": true,
        "id": 73,
        "url": "http://remote.bloxus.com/",
        "name": "Bloxus test"
    },
    {
        "needspassword": false,
        "id": 74,
        "url": "http://flickrtest1.userland.com/",
        "name": "Manila Test"
    }
],
"stat": "ok"
}

,其水平高于我的水平。

所以,我看到的例子只是解析他们的数据,如jsonResponse["blogs"],我不能这样做,因为我的格式不同。

如何解析我所获得的格式,或者如何返回更易于解析的格式?

任何建议表示赞赏,谢谢!

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

    let data = // Data received from WS
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? [[String : String]]
        //json is now an array from dictionary matching your model
    }
    catch {
       //handle error
    }

答案 1 :(得分:1)

这将在放入网络电话时解析它。

        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions()) as! [[String : AnyObject]]
            let firstPerson = json[0]
            print(firstPerson)
            let id = firstPerson["id"] as! String
            print(id)
            let name = firstPerson["name"] as! String
            print(name)
        } catch {
            //handle error
        }

另外,我倾向于反对为第三方库提供建议,但SwiftyJSON是我做的一个例外。如果您想尝试,请将其添加到您的pod文件中:

pod SwiftyJSON','3.0.0'

文档:https://github.com/SwiftyJSON/SwiftyJSON

编辑 - 回答评论:

更换行:

if let id = firstPerson["id"] as? String {
    print(id)
}

替换行(如果您需要保持该值):

var thisId: String?
if let id = firstPerson["id"] as? String {
    thisId = id
}
print(thisId ?? "")

答案 2 :(得分:-3)

我真的不知道swift但是可能有相当于ajax json编码(服务器端你json_encode你的数组和客户端你json_decode响应)

我们的想法是使用相同的格式化程序来编码和解码数据