从推送通知解析时SwiftyJson解析问题

问题描述:

我尝试解析来自推送通知的一些JSON,但我无法理解个别值。从推送通知解析时SwiftyJson解析问题

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") 
} 

和我最终的控制台输出:

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 

,但如果我尝试做print(json["data"]["apiKey"]["secret"].stringValue)我什么也没得到。 我有这个心理块,并不能解决这个与SwiftyJSON或任何其他正常的方式解析...

+0

小费:一块一块地做。因为当你写'json [“data”] [“apiKey”] [“secret”]。stringValue'时,你不知道它从哪里开始“失败”。所以'json [“data”]',然后'json [“data”] [“apiKey”]',然后'json [“data”] [“apiKey”] [“secret”]''那就是失败。但是你会看到你需要在'[“apiKey”]后面执行一个'[“data”]''。 – Larme

+0

由于我输入的格式不正常,我必须重新获取json [“data”]并将其从字符串解析为json,如下所示:if let json = try? JSON(数据:数据){ let parsedJSON:AnyObject? =(JSON [ “数据”]。stringValue的).parseJSONString //通过传递JSON [ “数据”]。stringValue的下降的电平 让swifyJSON = JSON(parsedJSON)//使该水平SwiftyJSON准备} –

+0

扩展String {var parseJSONString:AnyObject?{let data = self.data(using:String.Encoding.utf8,allowLossyConversion:false) if let jsonData = data {do {let message = try JSONSerialization.jsonObject(with:jsonData,options: .mutableContainers) if let jsonResult = message as? NSMutableArray {返回jsonResult//将返回json数组输出}否则,如果让jsonResult =消息为? NSMutableDictionary {return jsonResult //返回json字典输出} else {return nil}}将错误记录为NSError {print(“发生错误:\(error)”)return nil}} else {return nil}}} –

您正在访问错误的方式的值。 您必须使用json["data"]["apiKey"]["data"]["secret"].stringValue访问值。