当我尝试做的时候我接下来了:
for item in serverResponse {
print(item)
}
它给了我:
("0", {
"id" : 1,
"name" : "Programming"
})
("1", {
"id" : 2,
"name" : "Music"
})
如何解析此数组以在那里取name
?我和它混淆= /
更新
完整的回复是:
{
"name": "ABC",
"books": [
{
"id": 1,
"name": "Programming"
}
{
"id": 2,
"name": "Music"
}
]
}
答案 0 :(得分:0)
您正在寻找将Json转换为要读取name
的对象。原始解决方案是解析名称。更好的方法是使用SwiftyJson或ObjectMapper。
答案 1 :(得分:0)
如果您从服务器获得Json,则可以使用它:
func getJSON(urlToRequest: String) -> NSData{
return NSData(contentsOfURL: NSURL(string: urlToRequest)!)!
}
func parseJSON(inputData: NSData) -> NSArray{
let boardsDictionary = try! NSJSONSerialization.JSONObjectWithData(inputData, options: .AllowFragments) as! NSArray
return boardsDictionary
}
然后使用myData = parseJSON(json)
,您可以使用
let data = myData[0] as! NSDictionary
let name = data["name"]! as? String
答案 2 :(得分:0)
for item in serverResponse {
let itemArray = (item as? NSDictionary)["books"] as? NSArray
for (var i = 0; i < itemArray.count ; i++ ) {
if let dic1 = itemArray[i] as? NSDictionary {
let item: String!
item = dic1["name"] as? String
print(item)
}
}
}
答案 3 :(得分:0)
我不喜欢在Swift中处理字典。我发现对象表现更好,更易于管理 - 它们也更安全。
所以我的建议是将你的回复解析为“Book”结构,然后你可以轻松访问这些结构的属性(id,name)。
创建一个完成所有工作的课程可能会更好。
出于测试目的,我已经复制了您的回复:
let response: NSDictionary = ["name": "ABC", "books": [["id": 1, "name": "Programming"], ["id": 2, "name": "Music"]]]
现在让我们首先制作我们的Book结构。
它将具有两个属性,还有一个初始化程序,它将解码响应的“books”键中位于数组中的每个字典的内容。初始化程序是可用的,因为内容可能不可解码。
struct Book {
let id: Int
let name: String
init?(_ object: AnyObject) {
if let dictionary = object as? NSDictionary,
dictId = dictionary["id"] as? Int,
dictName = dictionary["name"] as? String {
self.id = dictId
self.name = dictName
} else {
return nil
}
}
}
现在我们可以创建一个可以容纳所有书籍的课程。我们需要另一个初始化器,它将迭代内容并使用结构创建对象:
class BooksManager {
var books = [Book]()
init(response: NSDictionary) {
if let array = response["books"] as? NSArray {
self.books = array.flatMap { Book($0) }
}
}
}
好的,现在我们已经完成了样板代码的编写,我们可以使用我们的玩具。
创建类的实例:
let manager = BooksManager(response: response)
就是这样!现在,该类包含对象,您可以轻松访问其属性。
例如使用循环:
for book in manager.books {
print("Book id: \(book.id), book name: \(book.name)")
}
结果:
图书编号:1,图书名称:编程
书号:2,书名:音乐
让我们说你想要第一本书的名字:
if let nameOfFirstBook = manager.books.first?.name {
print(nameOfFirstBook)
}
结果:
编程
最后一个例子,假设您要收集数组中的所有书名:
let booksNames = manager.books.map { $0.name }
结果:
[“编程”,“音乐”]