2017-09-21 3 views
0

J'essaye d'analyser une partie de JSON provenant d'une notification push, mais je n'arrive pas à atteindre les valeurs individuelles.Problème d'analyse SwiftyJson lors de l'analyse à partir d'une notification push

if let json = try? JSON(data: data) { 
print("before") 
print(json["data"].stringValue) // so this prints, but format of rest seems non standard 
print ("after") 
} 

et je finis avec la sortie de la console de:

before 

{ 
    "apiKey":{ 
     "data":{ 
     "user_id":8, 
     "id":75, 
     "secret":"G4UgMXXXXnt0bviGjNHCPRY4nYjuvXMrEkaU2dxqOC9j7XiIy4uS1TNLxv4Kev7w" 
     } 
    }, 
    "verified":true, 
    "loneWorker":{ 
     "data":{ 
     "vehicle_make":null, 
     "gender":null, 
     "mobile":"+447900007213", 
     "vehicle_model":null, 
     "hair_colour":null, 
     "distinguishing_features":null, 
     "firebase_token":"dsMGqAn57eo:APA91bHcE_8hoCQ9qgJfpr4b6yDrUkkkeJL7oGx-410v7hKyZfgBkcvROHevTmojJ6CvQrspDOvvXnXo9psTRKdnlQAEYzdvBE8OtsxHf-3JRmDRbJCiTrsVowDgQ5FeN7QQaEfMbFH", 
     "vehicle_colour":null, 
     "vrm":null, 
     "arc":{ 
      "data":{ 
       "prealert_sms_number":"+447506000094", 
       "sos_sms_number":"+44750000894", 
       "id":1, 
       "sos_call_number":"+447500000094" 
      } 
     }, 
     "build":null, 
     "dob":null, 
     "duress_word":null, 
     "name":"Stevan ", 
     "id":8, 
     "preexisting_conditions":null, 
     "email":"[email protected]", 
     "height":null 
     } 
    } 
} 

after 

mais si je tente de faire print(json["data"]["apiKey"]["secret"].stringValue) je reçois rien. J'ai un bloc mental avec ceci et je ne peux pas résoudre cela avec SwiftyJSON ou n'importe quel autre moyen normal ...

+0

Un conseil: Faites-le pièce par pièce. Parce que quand vous écrivez 'json [" data "] [" apiKey "] [" secret "]. StringValue' vous ne savez pas où il a commencé" failing ". Donc 'json [" data "]', puis 'json [" data "] [" apiKey "]', puis 'json [" data "] [" apiKey "] [" secret "]' et c'est celui qui échoue. Mais vous verrez que vous devez faire un '[" data "]' après '[" apiKey "]'. – Larme

+0

En raison de la mise en forme inhabituelle de mon entrée, j'ai dû récupérer le json ["données"] et l'analyser de la chaîne à json à nouveau comme ceci: si let json = try? JSON (data: data) { let parsedJSON: AnyObject? = (json ["data"]. stringValue) .parseJSONString // descente d'un niveau en passant dans json ["data"]. stringValue let swifyJSON = JSON (parsedJSON) // rend ce niveau prêt SwiftyJSON} –

+0

extension Chaîne {var parseJSONString: AnyObject? {Let data = self.data (en utilisant: String.Encoding.utf8, allowLossyConversion: false) si laissez jsonData = data {do {laissez message = essayez JSONSerialization.jsonObject (avec: jsonData, options: .mutableContainers) si let jsonResult = message sous? NSMutableArray {return jsonResult // Renvoie la sortie du tableau json} else si let jsonResult = message as? NSMutableDictionary {return jsonResult // Renvoie la sortie du dictionnaire json} else {return nil}} catch laisse erreur comme NSError {print ("Une erreur est survenue: \ (erreur)") return nil}} else {return nil}}} –

Répondre

0

Vous accédez à la valeur d'une manière incorrecte. Vous devez accéder à la valeur avec json["data"]["apiKey"]["data"]["secret"].stringValue.