2017-09-21 35 views
0

我嘗試解析來自推送通知的一些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}}} –

回答

0

您正在訪問錯誤的方式的值。 您必須使用json["data"]["apiKey"]["data"]["secret"].stringValue訪問值。