2017-03-03 2 views
0

J'essaie d'intégrer une API de connexion dans mon projet iOS. Quand je frappe cette API dans le navigateur, cela me donne une réponse JSON correcte. Considérant que, quand je l'appelle dans mon application, je suis incapable de lire JSON. Code est aussi:Lecture des données dans la réponse de l'API | iOS

let url = NSURL(string: "myURL") 
let request = NSURLRequest(URL: url!) 
let session = NSURLSession.sharedSession() 
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in 

    if error != nil { 
      print (error) 
    } 
     do { 
     //jsonDict is always nil 
     if let jsonDict = try self.jsonFromData(data!) { 
      print (jsonDict) 
     } 
     } 
     catch { 
      print ("hi") 
     }  
    } 

jsonFromData est aussi:

private func jsonFromData(jsonData: NSData) throws -> [NSDictionary]? 
{ 
    var jsonDict: [NSDictionary]? = nil 
    do 
    { 
     jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) as? [NSDictionary] 
    } 
    catch 
    { 
     throw(error) 
    } 

    return jsonDict 
} 

Réponse de l'API, lorsqu'il est frappé dans le navigateur est aussi:

enter image description here

S'il vous plaît aidez-moi, ce que je Je fais mal. Merci.

MISE À JOUR: Je viens de vérifier que si je convertis des données en chaîne, il donne une valeur correcte. à savoir

let string = NSString(data: jsonData, encoding: NSASCIIStringEncoding) 
print (string) 
//OUTPUT: Optional({"Authenticated":true,"CustomerID":000,"CustomerName":"TEMP","Members":[{"MemberID":000,"MemberNumber":"000","MembershipID":00,"MembershipExpiration":"\/Date(1517464799000-0600)\/","ValidBuyerTypes":[0]}]}) 

Répondre

1

Regardez votre code où vous décoder le JSON et l'as? déclaration. Vous essayez d'obtenir un tableau de NSDictionary. Votre JSON tel qu'il est imprimé contient un seul dictionnaire et non un tableau.

0

Essayez d'utiliser à la place NSKeyedUnarchiver:

jsonDict = NSKeyedUnarchiver.unarchiveObjectWithData(jsonData)! as NSDictionary 
1

Cela semble juste pour moi. La seule chose que je peux penser est que (malgré ce que la sortie de chaîne ressemble) le conteneur de niveau supérieur de votre réponse est PAS un NSDictionary. Dans votre fonction jsonFromData, au lieu d'assumer le résultat de JSONObjecWithData sera un NSDictionary, je dirais:

let iDunnoWhatThisIs = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) // don't cast this to NSDictionary 

et voir ce que vous obtenez en retour. Il devrait être un dictionnaire ou un tableau, cependant, puisque vous avez NSJSONReadingOptions.AllowFragments pour les options, il est possible que ce soit autre chose. Commencez par vous assurer que vous récupérez réellement ce que vous supposez être et que vous partez de là.

+0

Oui, j'ai résolu le problème de cette façon. La réponse était en chaîne (très probablement). et puis j'ai dactylographié la chaîne au dictionnaire .. Je partagerai aussi ma réponse. –