没有得到预期的结果斯威夫特
问题描述:
解析JSON我有一个看起来像这样没有得到预期的结果斯威夫特
[
{
"id_test" : "1",
"title":"test1"
},
{
"id_test" : "2",
"title":"test2"
},{
"id_test" : "3",
"title":"test3"
},
]
我用这个代码读取JSON在我的程序Web服务:
func downloadJsonWithUrl()
{
let url = URL(string:"weserviceurl")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil
{
print("Error")
}
else
{
if let content = data
{
do
{
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
print(myJson)
}
catch
{
}
}
}
}
task.resume()
}
我的问题是,目前使用的使用下面我系列化这段代码:
if let info = myJson as? NSArray
{
if let categories = info["title"]
{
print(categories)
}
}
不起作用。它返回空。为什么?
答
试试这个
func downloadJsonWithUrl() {
let url = URL(string:"link")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print("Error")
} else {
if let content = data {
do {
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as! [AnyObject]
var categories: [String] = []
for item in myJson {
categories.append(item["title"] as! String)
}
print(categories)
} catch {
print(error)
}
}
}
}
task.resume()
}
答
你应该使用SWIFT Array
和Dictionary
类型。例如,... as? [[String: Any]]
说,您期望词典的数组:
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard let data = data, error == nil else {
print("\(error)")
return
}
guard let json = try? JSONSerialization.jsonObject(with: data), let array = json as? [[String: Any]] else {
print("not JSON array of dictionaries")
return
}
for dictionary in array {
if let idTest = dictionary["id_test"], let title = dictionary["title"] {
print("\(idTest): \(title)")
}
}
}
如果是第二张相对于第一代码的?你为什么在Swift 3中使用'NSArray'? – rmaddy
如果'info'是一个数组,那么'info [“title”]'没有任何意义。数组中的索引是一个数字值,例如'info [0]'是第一个字典。或者,如果你想遍历所有的人,你会'为信息{...}的字典,等等。 – Rob
老实说,我是新的使用swift和Im以下教程从youtube所以:(:(这就是为什么我问,如果NSArray是老,那么我需要使用什么?对于如此多的问题对不起 –