Swift 如何通过点击API端点来解码JSON数据?
我目前正在使用SwiftUI开发一个应用程序 我想在遇到API端点时解码JSON数据 但是我的密码不太好用 我怎样才能解决我的问题Swift 如何通过点击API端点来解码JSON数据?,swift,swiftui,Swift,Swiftui,我目前正在使用SwiftUI开发一个应用程序 我想在遇到API端点时解码JSON数据 但是我的密码不太好用 我怎样才能解决我的问题 这里是我访问端点时的JSON数据 https://sample.com/api/test/ *我肯定检查了这个端点是否工作良好 [ { "id": 1, "user": 1, "name": "AAA" }, {
这里是我访问端点时的JSON数据
https://sample.com/api/test/
*我肯定检查了这个端点是否工作良好
[
{
"id": 1,
"user": 1,
"name": "AAA"
},
{
"id": 2,
"user": 1,
"name": "BBB"
},
{
"id": 3,
"user": 1,
"name": "CCC"
},
{
"id": 4,
"user": 1,
"name": "DDD"
},
{
"id": 5,
"user": 1,
"name": "EEE"
}
]
代码如下: JsonModel.swift
import Foundation
struct Results: Codable {
var infos:[Infos]
}
struct Infos: Codable {
var id: Int
var user: Int
var name: String
}
AppState.swift
*我在注释时出错
import SwiftUI
import Foundation
import Combine
class AppStates: ObservableObject {
@Published var infos:Infos?
@Published var results:Results?
func hitAPI() {
let endpoint: String = "https://sample.com/api/test/"
guard let url = URL(string: endpoint) else {
print("Error: cannot create URL")
return
}
var urlRequest = URLRequest(url: url)
urlRequest.addValue("token xxxxxxxxxxxxxxxxxxxxxx", forHTTPHeaderField: "authorization")
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: urlRequest) {
(data, response, error) in
guard error == nil else {
print("error calling GET")
print(error!)
return
}
guard let responseData = data else {
print("Error: did not receive data")
return
}
DispatchQueue.main.async {
do{
let results = try JSONDecoder().decode(Results.self, from: responseData)
print(results)
}catch{
print("Error: did not decode") // I have an error here
return
}
}
}
task.resume()
}
}
霍姆·斯威夫特
import SwiftUI
struct Home: View {
@EnvironmentObject var appState: AppState
var body: some View {
VStack{
Button(action: {
appState.hitAPI()
}) {
Text("hit API")
}.padding()
}
}
}
struct Home: PreviewProvider {
static var previews: some View {
Home()
}
}
Xcode:Version 12.0.1
打印(“错误:未解码”)//我在这里有一个错误
=>打印(“错误:未解码:\(错误)”)//我在这里有一个错误
,然后重新测试。然后,您应该看到JSON中没有infos
,没有plant\u name
JSONDecoder().解码(Results.self
=>JSONDecoder().解码([Infos].self
和plant_name
=>name
,或在编码键中指定,但仍然应该是plantName
(camelcase)@Larme,对不起,我写错了名字,编辑了名字。JSON数据和结构信息中的名字是一样的。不过,除了plantName
,其余的都可以。JSON上没有“Infos”。这个级别不存在。打印错误,你会看到。@Larme,我把代码改成JSONDecoder()。解码([Infos].self,
现在运行良好!!感谢您的帮助,