使用 Swift 解析 JSON

Posted

技术标签:

【中文标题】使用 Swift 解析 JSON【英文标题】:JSON parsing using Swift 【发布时间】:2016-03-29 09:57:24 【问题描述】:

我有一个创建 JSON 数组的 php 文件。这是 JSON 输出。

["employee_id":"1","employee_name":"Steve","employee_designation":"VP","employee_salary":"60000","employee_id":"2","employee_name" :"Robert","employee_designation":"Executive","employee_salary":"20000","employee_id":"3","employee_name":"Luci","employee_designation":"经理","employee_salary" :"40000","employee_id":"4","employee_name":"Joe","employee_designation":"Executive","employee_salary":"25000","employee_id":"5"," employee_name":"Julia","employee_designation":"Trainee","employee_salary":"10000"]

我想在我的应用程序中使用 swift 解析这个数组。所以我用下面的代码来解析JSON数组

    func jsonParser() 
    let urlPath = "xxxxxxxxx/dbretrieve.php"
    guard let endpoint = NSURL(string: urlPath) else  print("Error creating endpoint");return 
    let request = NSMutableURLRequest(URL:endpoint)
    NSURLSession.sharedSession().dataTaskWithRequest(request)  (data, response, error) -> Void in
        do 
            guard let dat = data else  throw JSONError.NoData 
            guard let json = try NSJSONSerialization.JSONObjectWithData(dat, options:.AllowFragments) as? NSArray else  throw JSONError.ConversionFailed 
            print(json)
         catch let error as JSONError 
            print(error.rawValue)
         catch 
            print(error)
        
        .resume()

但我收到以下错误

错误域=NSCocoaErrorDomain 代码=3840 “字符 0 周围的值无效。” UserInfo=NSDebugDescription=字符 0 周围的值无效。

我犯了什么错误?

【问题讨论】:

This 可能会有所帮助。 @Adam 我认为 Objective-C 中的代码,他们使用 AFNetworking 是的,但没关系。错误是相同的,原因也很可能是相同的。它与序列化有关,与网络无关。和 NSJSONSerialization 一样,其他所有 Cocoa (Touch) 框架在 Swift 中的工作方式与在 Objective-C 中的工作方式完全相同。 您在此处显示的 JSON 是正确的,但鉴于您收到的错误消息,您获取的数据相同且无效。检查您的“xxxxxxxxx/dbretrieve.php”端点是否正确生成 JSON。 如果您使用 HTTP 代理嗅探流量,调试客户端-服务器通信是最简单的。我使用Charles Proxy,它总是会立即告诉我问题出在我的应用代码还是服务器代码上。 【参考方案1】:

我检查了你的 json 数组。这是完美的。 问题可能是序列化。

    取决于您收到的响应数据 尝试在 PHP 中禁用调试模式 试试下面的序列化代码

示例代码:

  do 
      let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]

      print(json)

 catch let error as NSError 
print("Failed to load: \(error.localizedDescription)")

【讨论】:

以上是关于使用 Swift 解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift (NSArray) 解析 JSON

需要帮助使用 Alamofire 使用 Swift 解析 JSON

JSON数据未在swift3中使用Alamofire进行解析

使用 swift json 解析 json 数据

使用 alamofire 在 Swift 上解析 Json

使用 Swift 解析 JSON