【问题标题】:Convert Json string to Json object in Swift在 Swift 中将 Json 字符串转换为 Json 对象
【发布时间】: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 的结果,这显然会失败。

标签: ios json swift


【解决方案1】:

使用JSONDecoder,你也可以创建一个类Encodable,Decodable,声明编码键,也试试这个(省了很多时间):

https://app.quicktype.io/#l=swift

最好的问候!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多