【发布时间】:2016-04-09 09:38:57
【问题描述】:
我刚开始学 swift。因此,如果谈到 Swift,我是个菜鸟。为了尝试和实践它,我正在尝试为 ios 制作一个杂货应用程序。但是现在我被困在可能是最基本的事情之一上,即在不使用库的情况下序列化 JSON 对象,因此只需使用标准的 swift 代码。所以我的问题是你能帮我解决我从 api 获得的数据序列化的问题吗?
我正在使用邮递员检查我从 api 得到什么样的响应。当我访问 api 时,这是我得到的响应:
[
{
"id": 1,
"name": "Regular List"
},
{
"id": 2,
"name": "List for diner"
},
{
"id": 3,
"name": "List 3"
},
{
"id": 4,
"name": "List for next week"
},
{
"id": 6,
"name": "Test name"
}
]
在我的快速代码中,我试图通过这样做来获得此响应:
func getBoodschapListJSON(){
let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
let userId = prefs.integerForKey("UserId")
let requestUrl = NSURL(string: "http://localhost:8080/api/lists/user/id/\(userId)")!
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: requestUrl)
request.HTTPMethod = "GET"
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
session.dataTaskWithRequest(request, completionHandler: { (data, response, error) in
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
//Here comes some code to try and process the JSON object in the table View.
} catch {
print("error serializing JSON: \(error)")
}
}).resume()
}
但我从来没有得到有效的回应,我最终得到了错误: “序列化 JSON 时出错:Error Domain=NSCocoaErrorDomain Code=3840 “字符 0 周围的值无效。” UserInfo={NSDebugDescription=字符 0 周围的值无效。}”
我希望它与 JSON 格式不正确有关,因此 NSJSONSerialization 能够解释它。但我不确定,我查看了几个与我有相同问题的堆栈溢出帖子。他们中的大多数人说要使用 .AllowFragments 但这并没有解决我的错误。
有人能帮我解决我的代码中的这个错误吗?
【问题讨论】:
-
请检查您从服务器获取的 json 格式是否正确。您可以在 jsonlint.com 或任何其他 json 验证器上进行检查。
-
@ArunGupta 我用 jsonlint.com 检查了它,它是有效的 json。我怀疑我调用的方法:“try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)”是否能够解释 api 返回的 json。我想我使用了正确的参数,但我是菜鸟,所以很容易出错。
-
您可以发布“设置”文件夹和您的 API 代码吗?
标签: json swift serialization swift2 nsjsonserialization