【发布时间】:2017-09-21 19:30:01
【问题描述】:
关于使用 Swifty JSON 解析 JSON 的问题
这是 **SwiftyJSON* 问题:我试图解析来自推送通知的一些 JSON,但我似乎无法将其转换为单个值
if let json = try? JSON(data: data) {
print("before")
print(json["data"].stringValue)
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":"xxxxxx@hotmail.com",
"height":null
}
}
}
after
但如果我尝试这样做:
print(json["data"]["apiKey"]["secret"].stringValue)
我什么也得不到。
我对此有一个心理障碍,无法用 SwiftyJSON 或任何其他正常方式解析它...
[编辑:谢天谢地,我找到了这个问题的答案,您可能会在下面的 cmets 中看到。这些天来,我现在喜欢 Codable 作为一个很好的现代替代品]。
【问题讨论】:
-
小贴士:一块一块地做。因为当您写
json["data"]["apiKey"]["secret"].stringValue时,您不知道它从哪里开始“失败”。所以json["data"],然后是json["data"]["apiKey"],然后是json["data"]["apiKey"]["secret"],这就是失败的地方。但是你会发现你需要在["apiKey"]之后做一个["data"]。 -
由于我的输入格式异常,我不得不检索 json["data"] 并再次将其从字符串解析为 json,如下所示: if let json = try? JSON(数据:数据){让解析JSON:AnyObject? = (json["data"].stringValue).parseJSONString // 通过传入 json["data"].stringValue 降低一个级别 let swifyJSON = JSON(parsedJSON) // 使该级别 SwiftyJSON 准备就绪}
-
extension 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 { return jsonResult //会返回json数组输出} else if let jsonResult = message as? NSMutableDictionary { return jsonResult //会返回json字典输出 } else {return nil } } catch let error as NSError { print("An error occurred: (error)") return nil }}else { return nil }}}跨度>
标签: json swift parsing swifty-json