【发布时间】:2015-06-12 07:46:14
【问题描述】:
在您发出 HTTP 请求并取回 JSON 数据时,我有一个关于何时使用 NSDictionary 和何时使用 NSArray 的问题。
例如,如果返回的 JSON 是 对象数组,如下所示:
[
{object1},
{object2},
.........
]
我的代码中有以下行:
if let books:Array<AnyObject> = json[""] as? Array<AnyObject> {
}
它给出一个错误:
数组
?不能转换为 Array
解析:
var json:NSMutableArray = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSMutableArray
if (jsonError != nil) {
println("Error parsing json: \(jsonError)")
}
知道我可能做错了什么。
更新:
目前我有以下代码:
class func getBooks(completion: (result:Array<BookSummary>)->()) {
var bookArray = [BookSummary]()
let url = NSURL(string: "http://something.herokuapp.com/user/all")
if let tempUrl:NSURL = url {
let urlReq = NSURLRequest(URL: tempUrl)
let queue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(urlReq, queue: queue, completionHandler: { (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
if (error != nil) {
println("API error: \(error), \(error.userInfo)")
}
var jsonError:NSError?
var newBook = BookSummary(id: "", title: "", fullname: "", thumbnail: "")
if let arr = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? [AnyObject] {
for a in arr {
//println(a)
//println( arr[0])
println( arr[0])
}
}
通过 println(arr[0]) 我在第一个索引处获取对象。
但如果我尝试println(arr[0].fullname) 会出现错误:
任何对象都没有名为 fullname 的成员
【问题讨论】:
-
@Arbitur 感谢您的回复。那么什么是正确的方法。我有一个返回 JSON 的 API。但我似乎无法解析它。 swift中的HTTP请求和解析JSON是否涉及任何具体步骤
-
你是如何提出请求的?
-
我的错,一个 json 实际上可以作为一个数组开始。你是怎么解析的?你在使用 NSJSONSerialization 吗?
-
@Arbitur 感谢您的回复。是的,我正在使用 NSJSONSerialization。请参阅上面已编辑的帖子。我想做的就是发出一个 HTTP 请求,取回 JSON 数据,解析它并在我认为合适的时候使用它。我已经坚持了好几天了。在javascript中很容易做到这一点。因为有具体的步骤要遵循,但我对 swift 感到非常困惑,因为我没有看到任何具体的步骤。
-
请看我的回答