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 ...
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
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} –
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}}} –