json - 如何在 Swift 中使用 Codable 解析 JSON?
问题描述
我能够使用JSONSerialization解析 JSON ,但无法使用Codable解析。
json看起来像这样:
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
}
请帮我写代码。
能够使用 JSONSerialization 解析:数据来了
无法使用 Codable 解析 JSON:数据未到来
struct jsonDataModel: Codable{
var name: String
var userName: String
var email: String
init(name: String, username: String, email: String){
self.name = name
self.userName = username
self.email = email
}
}
class WebviewViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var testWebView: WKWebView!
//var itemsArray = [jsonDataModel]()
override func viewDidLoad() {
super.viewDidLoad()
serviceCall()
}
func serviceCall()
{
let jsonString = "https://jsonplaceholder.typicode.com/users"
let jsonData = jsonString.data(using: .utf8)!
do {
let jsonDecoder = JSONDecoder()
let user = try jsonDecoder.decode(jsonDataModel.self, from: jsonData)
print("all data \(user)")
print("Hello \(user.name), \(user.userName), \(user.email) ")
} catch {
print("Unexpected error: \(error).")
}
}
}
请帮我用可编码的方式解析 json。
解决方案
试试这个例子。
import UIKit
import Foundation
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://jsonplaceholder.typicode.com/users")!
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
guard let data = data else { return }
do{
let jsonDataModels = try JSONDecoder().decode([JSONDataModel].self, from: data)
print(String(data: data, encoding: .utf8)!)
print("jsonDataModels: \(jsonDataModels)")
}catch{}
}
task.resume()
}
}
struct JSONDataModel: Codable {
let id: Int
let name, username, email: String
let address: Address
let phone, website: String
let company: Company
}
struct Address: Codable {
let street, suite, city, zipcode: String
let geo: Geo
}
struct Geo: Codable {
let lat, lng: String
}
struct Company: Codable {
let name, catchPhrase, bs: String
}
推荐阅读
- highcharts - 高图表:我们可以减少分组柱形图中两个条形之间的距离吗
- audio - setPTS 输出错误的持续时间(Ffmpeg)
- node.js - 如何使用 nodejs 将文件上传到 IPFS
- python - 基于 louvain 集群的 Anndata 子集
- c# - 如何使 SOAP API 请求需要一些字段?
- c++ - vulkan可以接受多少个draw call?
- android - 由于收集复杂,Android 应用程序崩溃。无法评估表达式 - 无法生成表达式 KTObject 文字异常
- oracle - “ORA-00001: 违反唯一约束 (constraint_name)” 错误即使我没有检查
- xpath - 如何获取正确的 xpath 以在 Google 电子表格中使用
- d3.js - d3js v5 如何使路径取决于文本大小?