【发布时间】:2022-01-20 02:31:36
【问题描述】:
我尝试将 JSON 字符串转换为 JSON 对象,但在 JSONSerialization 之后,JSON 中的输出为零。
响应字符串:
{
"resultCount":50,
"results": [
{
"screenshotUrls":[ "1.jpg", "2.jpg", "3.jpg"],
"ipadScreenshotUrls":[ "3.jpg", "4.jpg", "5.jpg"],
"features":["iosUniversal"],
"supportedDevices":["iPhone5s-iPhone5s", "iPhone13-iPhone13"],
"kind":"software",
"genres":["Food & Drink", "Travel"]},
{
"screenshotUrls":[....
我尝试用下面的代码转换这个字符串:
let url = URL(string: "https://itunes.apple.com/search?term=yepp&entity=software")!
let task = URLSession.shared.dataTask(with: url) {
(data: Data?, response: URLResponse?, error: Error?) in
if let error = error {
print(error)
return
}
let json = try! JSONSerialization.jsonObject(with: data!, options: []) as? ResponseDataModel
print(json)
}
响应数据模型 这是我做的模型。
import Foundation
// MARK: - ResponseDataModel
struct ResponseDataModel: Codable {
let resultCount: Int
let results: [Result]
}
// MARK: - Result
struct Result: Codable {
let screenshotUrls, ipadScreenshotUrls: [String]
let features: [String]
let supportedDevices: [String]
let kind: String
let genres: [String]
}
【问题讨论】:
-
当使用 Codable 时,你会想要使用 JSONDecoder 而不是 JSONSerialization。见hackingwithswift.com/articles/119/codable-cheat-sheet
-
JSONSerialization 通常会返回一个 NSDictionary 或 NSArray。您没有打印可能不是 nil 的 JSONSerialization 的结果,而是尝试将其转换为 ResponseDataModel 的结果,这显然会失败。