Swift JSON erreur : impossible de fonte valeur de type '__NSDictionaryM' à 'NSArray'
lors du décodage JSON à partir d'un webservice(API) j'obtiens l'erreur :
Could not cast value of type '__NSDictionaryM' (0x1037ad8a8) to 'NSArray' (0x1037ad470).
Mon Code :
var kGetURL = "http://bitnami.local/cscart_demo/api/users"
//var kGetURL = "http://localhost/fendy/getjson.php"
var json : Array<AnyObject> = []
override func viewDidLoad() {
super.viewDidLoad()
start()
}
func getData(data : NSData){
//error at this line :
json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! Array<AnyObject>
//error
tableView.reloadData()
}
func start(){
var url : NSURL = NSURL(string: kGetURL)!
var data : NSData = NSData(contentsOfURL: url)!
getData(data)
}
si je change d'url à http://localhost/fendy/getjson.php, son travail agréable.
j'obtiens le message d'erreur si l'adresse de ma page est http://bitnami.local/cscart_demo/api/users
Réponse de webservice http://localhost/fendy/getjson.php :
[{"id":"17","Name":"KFC","Message":"awesome"},
{"id":"18","Name":"McDonald","Message":"good"},
{"id":"23","Name":"Burger King","Message":"tasty"},
{"id":"38","Name":"Pizza hut","Message":"yummy"},
{"id":"39","Name":"Steak","Message":"very Delicious"}]
Réponse de webservice http://bitnami.local/cscart_demo/api/users :
{"users":
[{"user_id":"4","user_login":"user_4","is_root":"N","timestamp":"1441608048","user_type":"C","status":"A","firstname":"","lastname":"","email":"[email protected]","company":"","company_id":"1","company_name":"Simtech"},
{"user_id":"3","user_login":"customer","is_root":"N","timestamp":"1441604240","user_type":"C","status":"A","firstname":"Customer","lastname":"Customer","email":"[email protected]","company":"Simtech","company_id":"1","company_name":"Simtech"},
{"user_id":"1","user_login":"admin","is_root":"Y","timestamp":"1441604240","user_type":"A","status":"A","firstname":"John","lastname":"Doe","email":"[email protected]","company":"Your company","company_id":"0","company_name":null}],
"params":{"page":1,"items_per_page":"10","sort_order":"asc","sort_by":"name","sort_order_rev":"desc","total_items":"3"}}
je pense que le Style est le même, mais pourquoi ne pas travailler avec l'url http://bitnami.local/cscart_demo/api/users . quelqu'un peut aider?
Vous devez vous connecter pour publier un commentaire.
La bitnami réponse commence par un
{
et c'est donc un Objet JSON, ce qui correspond à uneNSDictionary
. L'autre commence avec[
qui indique un tableau.Vous avez besoin de changer le type de
json
àDictionary<String, AnyObject>
, et désérialiser comme suit:Votre méthode est coulée résultat JSON à un tableau. Il fonctionne très bien avec l'URL qui renvoie un tableau représenté sous forme de JSON, mais il ne fonctionne pas avec l'URL qui renvoie un dictionnaire, pas un tableau, représentée sous forme de JSON.
Bien que le "style" de valeurs renvoyées a la même apparence, le second est un article de dictionnaire. Ce que vous voulez probablement, c'est pour extraire le
"users"
élément, ce qui est un tableau.Si vous ne savez pas lequel des deux URLs que vous obtenez, vous pouvez essayer les deux styles avec
as?
distribution au lieu deas!
:essayer de cache pour la Sérialisation