使用 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的主要内容,如果未能解决你的问题,请参考以下文章
需要帮助使用 Alamofire 使用 Swift 解析 JSON