从 api 返回的数据总是 nil?
The data returned from the api is always nil?
我正在从 API 中检索数据。问题是数据总是 returns 为零。
它是一个问题列表,通常是 10 个。我写的代码总是 returns 10 个 nil 结果。我用具有相同结构的不同 API 尝试了相同的代码,它总是有效。
这是结构:
struct Questions: Codable{
let question: String?
}
这是代码:
guard let url = URL(string: "http://adminsapi.somee.com/Api/Test/?id=1") else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
do{
let test = try? JSONDecoder().decode([Questions].self, from: data)
for ask in test{
print(ask.question)
}
}
}.resume()
这是我得到的结果:
nil nil nil nil nil nil nil nil nil nil
这是postman中API返回的数据:
[
{
"AskName": "Urgenct of defecation"
},
{
"AskName": "Mucous and streaked stools"
},
{
"AskName": "vomiting"
},
{
"AskName": "Fever"
},
{
"AskName": "Tympany on percussion"
},
{
"AskName": "Bowel sounds"
},
{
"AskName": "shifting dullness"
},
{
"AskName": "psoas and obturator sign"
},
{
"AskName": "rebound tenderness"
},
{
"AskName": "signs of shock"
}
]
此外,当我尝试解析 json 并读取一个字符串中的全部数据时,它完全可以正常工作。不知道问题出在哪里
已编辑。您的问题结构不正确。这是正确解析结果的工作操场代码。
import UIKit
import PlaygroundSupport
let data = """
[
{
"AskName": "Urgenct of defecation"
},
{
"AskName": "Mucous and streaked stools"
},
{
"AskName": "vomiting"
},
{
"AskName": "Fever"
},
{
"AskName": "Tympany on percussion"
},
{
"AskName": "Bowel sounds"
},
{
"AskName": "shifting dullness"
},
{
"AskName": "psoas and obturator sign"
},
{
"AskName": "rebound tenderness"
},
{
"AskName": "signs of shock"
}
]
""".data(using: .utf8)!
struct Questions: Codable{
let AskName:String
}
do {
try JSONDecoder().decode([Questions].self, from: data)
} catch {
print(error)
}
您也可以定义为:
struct Questions: Codable {
let question: String
private enum CodingKeys: String, CodingKey {
case question = "AskName"
}
}
您的 Question
实施是错误的。您需要告诉编译器 question
变量需要使用 AskName
键进行解码。
struct Questions: Codable {
let question: String?
private enum CodingKeys: String, CodingKey {
case question = "AskName"
}
}
我正在从 API 中检索数据。问题是数据总是 returns 为零。 它是一个问题列表,通常是 10 个。我写的代码总是 returns 10 个 nil 结果。我用具有相同结构的不同 API 尝试了相同的代码,它总是有效。
这是结构:
struct Questions: Codable{
let question: String?
}
这是代码:
guard let url = URL(string: "http://adminsapi.somee.com/Api/Test/?id=1") else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
do{
let test = try? JSONDecoder().decode([Questions].self, from: data)
for ask in test{
print(ask.question)
}
}
}.resume()
这是我得到的结果:
nil nil nil nil nil nil nil nil nil nil
这是postman中API返回的数据:
[
{
"AskName": "Urgenct of defecation"
},
{
"AskName": "Mucous and streaked stools"
},
{
"AskName": "vomiting"
},
{
"AskName": "Fever"
},
{
"AskName": "Tympany on percussion"
},
{
"AskName": "Bowel sounds"
},
{
"AskName": "shifting dullness"
},
{
"AskName": "psoas and obturator sign"
},
{
"AskName": "rebound tenderness"
},
{
"AskName": "signs of shock"
}
]
此外,当我尝试解析 json 并读取一个字符串中的全部数据时,它完全可以正常工作。不知道问题出在哪里
已编辑。您的问题结构不正确。这是正确解析结果的工作操场代码。
import UIKit
import PlaygroundSupport
let data = """
[
{
"AskName": "Urgenct of defecation"
},
{
"AskName": "Mucous and streaked stools"
},
{
"AskName": "vomiting"
},
{
"AskName": "Fever"
},
{
"AskName": "Tympany on percussion"
},
{
"AskName": "Bowel sounds"
},
{
"AskName": "shifting dullness"
},
{
"AskName": "psoas and obturator sign"
},
{
"AskName": "rebound tenderness"
},
{
"AskName": "signs of shock"
}
]
""".data(using: .utf8)!
struct Questions: Codable{
let AskName:String
}
do {
try JSONDecoder().decode([Questions].self, from: data)
} catch {
print(error)
}
您也可以定义为:
struct Questions: Codable {
let question: String
private enum CodingKeys: String, CodingKey {
case question = "AskName"
}
}
您的 Question
实施是错误的。您需要告诉编译器 question
变量需要使用 AskName
键进行解码。
struct Questions: Codable {
let question: String?
private enum CodingKeys: String, CodingKey {
case question = "AskName"
}
}