我想找到解析 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/