【发布时间】:2019-08-28 22:38:18
【问题描述】:
我正在我的 Swift 应用程序中解码 JSON 响应,并且代码在它决定停止工作之前一直有效。
这是我的 json 回复
{
"foods": [
{
"food_name": "Milk Chocolate",
"brand_name": "Snickers",
"serving_weight_grams": 41.7,
"nf_calories": 212.3,
"nf_total_fat": 11.6,
"nf_saturated_fat": 4,
"nf_total_carbohydrate": 22.7,
"nf_protein": 3.9
}
]
}
这是解码我的 json 的代码
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data else { return }
print(String(data: data, encoding: .utf8)!)
do {
//Decode dataResponse received from a network request
let decoder = JSONDecoder()
let foods = try decoder.decode(JSONFoods.self, from: data) //Decode JSON Response Data
self.jsonfood = foods.JSONFood[0]
print(self.jsonfood!)
} catch let parsingError {
print("Error", parsingError)
}
}
task.resume()
我的结构是
struct JSONFoods: Decodable {
var JSONFood: [JSONFood]
}
struct JSONFood: Decodable{
var food_name: String
var brand_name: String
var nf_calories: Int
var nf_protein: Int
var nf_total_fat: Int
var nf_total_carbohydrate: Int
var serving_weight_grams: Int
}
我得到的错误信息是这样的
keyNotFound(CodingKeys(stringValue: "JSONFood", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "没有与键 CodingKeys 关联的值(stringValue: "JSONFood", intValue: nil) ( "JSONFood").", 底层错误:nil))
如果我将 decode(JSONFoods.self, from: data) 替换为 decode(JSONFood.self, from: data) 我收到此错误消息
keyNotFound(CodingKeys(stringValue: "food_name", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "没有与键 CodingKeys 关联的值(stringValue: "food_name", intValue: nil) ( "food_name").", 基础错误:nil))
我到处搜索都没有运气,非常感谢任何帮助
【问题讨论】:
-
JSONFood!=foods.