json - 不使用 for 语句解析 JSON 数组

标签 json swift

我想找到解析 JSON 数组的解决方案。我有用于解析 JSON 的代码,但我想要一个没有 for 语句的解决方案,我可以解析数组。

解析代码:

func parsigJsonData(resultArray:any?){

  if let resultArray = resultDic["trucks"] as? BaseModelData {
        print(resultArray)
     }
}


    class BaseModel {
 public typealias BaseModelData = (id:String?,title:String?,select:Bool)

      var id : String?
      var title : String?
      var select : Bool = false

      init(json: [String:Any]) {
        self.id = json["id"] as? String
        self.title = json["title"] as? String
        self.select = false
      }
    }
extension BaseModel {

  var tableRepresentation: [BaseModelData] {
    return [(id:id,title:title,select:select)]
  }
}

结果数组包含基本模型对象的列表。我尝试使用此代码进行解析,但这不起作用并且转换为 BaseModelData 失败。 是否有一种无需 for 语句即可解析 JSON 数组的解决方案? 感谢您提供的解决方案。

这是我的 json 响应示例:

{"卡车":[{"id":"1","标题":"\u062e\u0627\u0648\u0631\u062a\u0627 5\u062a\u0646\u0627\u062a\u0627\u0642\u0686\u0648\u0628\u06cc"},{"id":"2","title":"\u062e\u0627\u0648\u0631\u062a\u0627 5\u062a\u0646\u06a9\u0645\u067e\u0631\u0633\u06cc"},{"id":"3","标题":"\u062e\u0627\u0648\u0631\u062a\u0627 8\u062a\u0646\u0627\u062a\u0627\u0642\u0686\u0648\u0628\u06cc"},{"id":"4","标题":"\u062e\u0627\u0648\u0631\u062a\u0627 8\u062a\u0646\u06a9\u0645\u067e\u0631\u0633\u06cc"} ,{"id":"5","title":"\u062e\u0627\u0648\u0631\u06cc\u062e\u0686\u0627\u0644\u062f\u0627\u0631"}]

最佳答案

Swift 4 可以让你变得非常简单。只需添加 Decodable 协议(protocol)即可,

struct BaseModel: Codable {
      var id : String?
      var title : String?
      var select : Bool = false
}

并用它来检索数据:

func makeRequest(completionHandler: @escaping ([BaseModel]?, Error?) -> Void) {

var urlRequest = URLRequest(url: url)
request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request as URLRequest){
                (data, response, error) in
                guard let responseData = data else {
                    print("Error: did not receive data")
                    completionHandler(nil, error)
                    return
                }
                guard error == nil else {
                    completionHandler(nil, error)
                    return
                }

                let decoder = JSONDecoder()
                do {
                    let dataObject = try decoder.decode([BaseModel].self, from: responseData)
                    completionHandler(dataObject, nil)
                } catch {
                    print("error trying to convert data to JSON")
                    print(error)
                    completionHandler(nil, error)
                }
}

task.resume()
}

关于json - 不使用 for 语句解析 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461433/

相关文章:

swift - 卡特琳娜测试版 5 : Quicktime Audio Recording Not Working on 2018 Macbook Pros sw

ios - 以编程方式从 UIBarButtonItem 继续

iOS:何时使用委托(delegate)/数据源(协议(protocol))与属性

javascript - 在php中获取方法然后将值传递给json格式

jquery - ASP MVC JsonResult 呈现为页面,而不是通过调用 jQuery 函数捕获

c# - 迭代嵌套的 JSON 对象数组并访问内部 token 值

swift - 如何将此 Json 正文转换为 alamofire 参数格式?

ios - 将图像从 JSON 存储到自定义类 iOS

c# - 如何设置构造函数以反序列化仅获取属性而不必在 c# 中复制代码?

ios - 仅在通过解析保存数据后执行/触发 segue