使用数组根对象在Swift中解析JSON数组

以利亚

我正在尝试解析格式为json的数组:

 [{"id":1,"date":1596827226.558827,"at":"@mrpit", "name":"Pitmen", "content":"This is the first post, There is a bunch of interesting information in here"},
{"id":2,"date":1596827234.901298, "at":"@mrben", "name":"Benman", "content":"This is the second post, pretend there is a bunch of scientific information in here."},
{"id":3,"date":1596827268.411034, "at":"@mrgreen", "name":"The Green Machine", "content":"This is the thrid post, idk what you wanna pretend is here, maybe something political"},
{"id":4,"date":1596834988.94011, "at":"@mrman", "name":"The Man who Can", "content":"And finally we are at the forth post, there is tons going on here, maybe even something offensive."}] 

而且我很麻烦,因为根对象似乎是一个数组。

我正在尝试使用这样的东西

struct DataSet: Decodable {
    let post: [SinglePost]
}

struct SinglePost: Decodable{
    let id: Int
    let date: Double
    let at: String
    let name: String
    let content: String
}


 static func getPost(returnWith: @escaping (DataSet?, Bool)->()) {
        
        let session = URLSession.shared
        let decoder = JSONDecoder()
        let uString = serverUrl
        
        if let url = URL(string: serverUrl + "/post/") {
            let task = session.dataTask(with: url, completionHandler: { data1, response, error in
                if (error != nil) {
                    returnWith(nil, false)
                    return
                }
                
                if let dataString = String(data: data1!, encoding: .utf8) {
                    print(dataString)
                    
                    do {
                        
                        let postSet = try decoder.decode(DataSet.self, from: Data(dataString.utf8))
                        returnWith(postSet, true)
                        
                    }
                        
                    catch let jsonError {
                        print("Error Serializing JSON", jsonError)
                        returnWith(nil, false)
                    }
                } else {
                  returnWith(nil, false)
                }
                
            })
            
            task.resume()
            
        }
    }

但这是行不通的。

这样做的最好方法是什么。抱歉,我还挺新的,所以可能会有一个明显的答案。

里奥·达布斯

那里的问题是您试图解码字典而不是数组。

只是改变

let postSet = try decoder.decode(DataSet.self, from: Data(dataString.utf8))

let postSet = try decoder.decode([SinglePost].self, from: Data(dataString.utf8))

编辑/更新:

关于方法签名,只需将其更改为返回数组而不是DataSet结构,我将返回错误而不是Bool:

static func getPost(completion: @escaping ([SinglePost]?, Error?) -> ()) {
    let session = URLSession.shared
    let decoder = JSONDecoder()
    if let url = URL(string: serverUrl + "/post/") {
        let task = session.dataTask(with: url) { data, response, error in
            guard let data = data else {
                completion(nil, error)
                return
            }
            do {
                completion(try decoder.decode([SinglePost].self, from: data), nil)
            } catch {
                print("Error Decoding JSON", error)
                completion(nil, error)
            }
        }
        task.resume()
    }
}

用法:

getPost { posts, error in
    guard let posts = posts else {
        print(error ?? "")
    }
    for post in posts {
        print(post)
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Swift中解析具有对象的JSON数组

来自分类Dev

Swift - 嵌套 JSON 对象中的解析数组不起作用

来自分类Dev

JSON - 对象数组中的对象 - 如何使用 JS 解析循环?

来自分类Dev

使用Codable Swift解析时忽略数组中的空对象

来自分类Dev

EJS解析JSON对象中的JSON数组

来自分类Dev

使用Angular.js解析JSON中的嵌套对象数组

来自分类Dev

如何使用 npm dlv (JavaScript) 解析 JSON 对象中的数组

来自分类Dev

解析数组中的JSON数组并使用键值

来自分类Dev

在Swift 4中无法使用JSONDecoder解析JSON数组

来自分类Dev

在Objective C中解析对象的JSON数组

来自分类Javascript

解析JavaScript中的JSON对象数组

来自分类Dev

从python中的对象解析Json数组

来自分类Dev

JSON.parse:解析对象中的数组

来自分类Dev

解析Crystal lang中的JSON对象数组

来自分类Dev

从组件中的服务解析JSON数组对象

来自分类Dev

在GO中解析json对象数组

来自分类Dev

解析NodeJS中的JSON对象数组

来自分类Dev

在Jackson中解析数组内的JSON对象

来自分类Dev

在python中解析json对象数组

来自分类Dev

未解析对象中的 JSON 数组

来自分类Dev

使用Jackson 2.0解析JSON对象数组

来自分类Dev

使用 jq 解析 json 对象数组

来自分类Dev

在 Swift 中解析嵌套的 JSON 数组

来自分类Dev

解析对象中的数组

来自分类Dev

如何在swift4中的对象内的数组内解析json对象

来自分类Dev

查询其根是SQL Server中对象数组的Json

来自分类Java

使用Retrofit解析JSON数组和对象数组

来自分类Dev

使用RapidJSON解析C ++中的对象数组

来自分类Dev

Swift & json : 对象数组