如何在 Swift 中解析特定的 JSON
Posted
技术标签:
【中文标题】如何在 Swift 中解析特定的 JSON【英文标题】:How to parse particular JSON in Swift 【发布时间】:2018-10-22 16:45:12 【问题描述】:为了解析 JSON,我在网上也找到了,我通常使用这种代码:
guard let results = receivedUserJSON["results"] as? [String: Any] else
print("Error interpreting results")
return
这一次我有一个问题,因为它似乎以这个守卫 let 的 else 结尾。 JSON 具有以下结构:
"results": [
"gender": "female",
"name":
"title": "mrs",
"first": "silene",
"last": "almeida"
,
"location":
"street": "2594 rua maranhão ",
"city": "pouso alegre",
"state": "distrito federal",
"postcode": 20447,
"coordinates":
"latitude": "-70.0198",
"longitude": "123.6577"
,
"timezone":
"offset": "+4:30",
"description": "Kabul"
,
"email": "silene.almeida@example.com",
"login":
"uuid": "d06a46b3-1c00-42be-b8fc-d271bf901f7d",
"username": "silversnake251",
"password": "ventura",
"salt": "UcckU6RG",
"md5": "7c8c4129587c61da01ca7cf4f88353c5",
"sha1": "6cbf7ec377ff4ebad5a392ec487343bf613858ef",
"sha256": "8dedf3649fb833a1936b8885627b86c6cf02062eb74f727b2cbd674a30f73e75"
,
"dob":
"date": "1969-07-13T00:58:26Z",
"age": 49
,
"registered":
"date": "2003-09-28T09:44:56Z",
"age": 15
,
"phone": "(95) 0094-8716",
"cell": "(20) 1014-3529",
"id":
"name": "",
"value": null
,
"picture":
"large": "https://randomuser.me/api/portraits/women/66.jpg",
"medium": "https://randomuser.me/api/portraits/med/women/66.jpg",
"thumbnail": "https://randomuser.me/api/portraits/thumb/women/66.jpg"
,
"nat": "BR"
],
"info":
"seed": "dd971cddf636d2d7",
"results": 1,
"page": 1,
"version": "1.2"
我应该怎么做才能正确解析这个 JSON?我不想使用 Codable 解决方案,因为我不需要所有这些值。
PS:我知道 json 是正确的,因为我尝试并打印了它:
if let JSONString = String(data: responseData, encoding: String.Encoding.utf8)
print(JSONString)
【问题讨论】:
在 Guard Else 处下断点,并发布当时 receivedUserJSON["results"] 的值 Json 如您所述是有效的。问题是您的结果是 [String: Any] 的数组,而您将其解析为 [String: Any]。试试看,让 results = receivedUserJSON["results"] as? [[String: Any]] else print("Error interpreting results") return 这应该会给你结果。 请查看使用 SwiftCodable
和实际模型..
【参考方案1】:
results
是一个数组
guard let results = receivedUserJSON["results"] as? [[String:Any]] else
print("Error interpreting results")
return
我看不出它是一个数组的价值,因为它包含 1 个元素,所以你可能会考虑改变这个 json
目前的结构
"results": [],
"info":
"seed": "dd971cddf636d2d7",
"results": 1,
"page": 1,
"version": "1.2"
你可以改成
"results": ,
"info":
"seed": "dd971cddf636d2d7",
"results": 1,
"page": 1,
"version": "1.2"
【讨论】:
这解决了!非常感谢你。无法更改 JSON 的结构,因为我正在使用一些 API,非常感谢! @Garu94 你也可以考虑使用 Codable以上是关于如何在 Swift 中解析特定的 JSON的主要内容,如果未能解决你的问题,请参考以下文章