2017-05-04 66 views
0

解析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) 
    } 
} 

不起作用。它返回空。爲什麼?

+0

如果是第二張相對於第一代碼的?你爲什麼在Swift 3中使用'NSArray'? – rmaddy

+1

如果'info'是一個數組,那麼'info [「title」]'沒有任何意義。數組中的索引是一個數字值,例如'info [0]'是第一個字典。或者,如果你想遍歷所有的人,你會'爲信息{...}的字典,等等。 – Rob

+0

老實說,我是新的使用swift和Im以下教程從youtube所以:(:(這就是爲什麼我問,如果NSArray是老,那麼我需要使用什麼?對於如此多的問題對不起 –

回答

1

試試這個

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() 
} 
+0

它說一個錯誤:輸入任何沒有下標的元素r –

+0

@xx_name立即嘗試 – xcocoader

+0

哦,上帝,我吸這個xd。它說同樣的錯誤 –

0

你應該使用SWIFT ArrayDictionary類型。例如,... 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)") 
     } 
    } 
}