【问题标题】:Extract Data out of JSON in swift快速从 JSON 中提取数据
【发布时间】:2017-03-27 13:22:59
【问题描述】:

这个问题已经被问了一百次,但互联网没有帮助,主要是因为我是 swift 和编程的新手,所以我提前道歉。

我正在尝试从 json 中提取一些数据。

这是我的代码:

let request = NSMutableURLRequest(url:myUrl! as URL);
request.httpMethod = "POST";

let postString = "email=\(email)";

request.httpBody = postString.data(using: String.Encoding.utf8);

let task = URLSession.shared.dataTask(with: request as URLRequest){
    data, response, error in

    if error != nil {
        print("error=\(error)")
        return
    }

    var err: NSError?
    do
    {

        let myJson = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
        print(myJson)
        let name = myJson["name"]

    }
    catch let error as NSError {
        err = error
    }
}
task.resume()

这是来自print(myJson)的JSON:

(
    {
        name = "TestTest";
    }
)

但我收到以下错误:

let name = myJson["name"]

致命错误:在展开可选值时意外发现 nil (lldb)

【问题讨论】:

  • 你的 JSON 顶级对象应该是一个数组或字典,你需要序列化你的对象
  • 一如既往但与问题无关,mutableContainers 在 Swift 中完全没有意义。并且不要在 Swift 3 中使用NSURL / NSMutableURLRequest。有原生结构URL / URLRequest
  • 好的,谢谢您的建议!
  • 你只需要使用 var 而不是 NSMutableURLRequest 来声明 URLRequest

标签: json swift xcode api


【解决方案1】:

您遇到的第一个问题是这一行:

let myJson = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

您指定数据的类型为 AnyObject。但它确实应该是一个字典数组。因此,您应该指定:

let myJson = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as [[String:Any]]

当然,仅此一项并不能解决问题,因为您必须先从数组中提取项目,然后才能使用字典表示法获取“名称”值。所以,在那之后你必须做这样的事情:

let row = myJson[0]
let name = row["name"]

【讨论】:

  • @Fahim 非常感谢您帮助像我这样的初学者,这很有效!你是对的,我正在做一个 Post 查询,因为这是一个登录屏幕,在登录时我想获取用户的 id(在这种情况下是名称)以将其用作全局变量。我敢肯定,总是有一行,所以我可以不使用 for 循环吗?
  • @Jonas 很高兴为您提供帮助 :) 是的,您可以只提取第一行。我已经相应地修改了我的答案。
  • @Jonas 希望你也有美好的一天:)
猜你喜欢
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多