2017-08-10 3 views
0

Comment puis-je jeter Any de type je reçois de JSONSerialization à un éventail de dictionnaires? Mon code est:« Tout » est pas convertible « [[chaîne: Tous]] »

let jsonArray: [[AnyHashable: Any]] 

    do { 

     jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: [.ReadingOptions.allowFragments]) as! [[AnyHashable : Any]] 
    } 
    catch { 
     let description = NSLocalizedString("Could not analyze earthquake data", comment: "Failed to unpack JSON") 
     print(description) 
     return 
    } 

Mais compilateur me donne un message d'erreur:

'Tout' est pas convertible '[[AnyHashable: Tous]]'

post-scriptum

J'ai besoin pour analyser ensemble de dictionnaires, de sorte JSON ressemble à ceci:

[{ 
    "username": "admin", 
    "password": "123" 
}, { 
    "username": "bbvb", 
    "password": "3333" 
}, { 
    "username": "asd", 
    "password": "222" 
}] 
+0

Ne pas utiliser la coulée de force, puisque les données JSON peuvent être endommagées ou incorrectes, utilisez la coulée en option avec l'opérateur '' que?. En outre, conformément à la spécification JSON, les clés JSON doivent être 'String's, il n'y a donc aucune raison d'utiliser' AnyHashable' comme clés de dictionnaires. Cependant, sans voir votre réponse 'JSON', nous ne pouvons pas vous donner d'aide exacte, très probablement vous ne recevez pas le format JSON attendu. –

+0

@ DávidPásztor J'ai mis à jour un post avec un exemple JSOn. Changer 'AnyHashable' en 'String' ne corrige rien. Si les données sont corrompues, 'attraper' l'attrape, donc pas besoin d'utiliser des options. – Shmidt

+1

Ce n'est pas vrai. Le bloc do-catch n'attrape que les erreurs pouvant être lancées, mais le lancement de force ne peut pas être intercepté. Le bloc do-catch n'attrape l'erreur que si les données ne peuvent pas être décodées en JSON, mais cela signifie que JSON ne sera pas dans le bon format. –

Répondre

1

Pourquoi utilisez-vous AnyHashable ??

Essayez ceci:

let jsonArray: Any? = nil 

    do { 



jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [Any] 

     if jsonArray != nil { 
      if let resp = jsonArray as? [[AnyHashable : Any]]{ 

     //your result should be here inside resp, which is an array of dictionary of key-val type `AnyHashable : Any`, although you could just use String value for the key, making your format from [[AnyHashable : Any]] to [[String : Any]] 
     } 

    } 
    catch { 
      let description = NSLocalizedString("Could not analyze earthquake data", comment: "Failed to unpack JSON") 
      print(description) 
      return 
    } 
+0

Désolé, quel est le problème avec 'AnyHashable'? Pourquoi je ne peux pas l'utiliser? – Shmidt

+0

Votre code ne fonctionne pas. – Shmidt

+0

Vous pouvez utiliser AnyHashable mais cela dépend de la structure de votre JSON, si votre clé est de structure de type imbriqué. –