我在使用swift 4解码和解析此JSON文件数据时遇到问题。我不知道如何在代码的底部构造我的结构,以便它们可以遍历我的数组字典数据。即。数据[0],数据[1],数据[2]等。 这是我遇到的错误:
序列化JSON keyNotFound时出错(whatsong.RecentTvList。(_882383248D6F034EC588461F3FFE705E中的CodingKeys).title,Swift.DecodingError.Context(codingPath:[],debugDescription:"没有与键标题关联的值(\&# 34; title \")。",underlyingError:nil))
{
data: [
{
_id: 100284,
poster: "urlstring",
title: "Happy!"
},
{
_id: 100284,
poster: "urlstring",
title: "Happy!"
}
]
}
let jsonUrlString = "HIDDEN"
guard let url = URL(string: jsonUrlString) else
{return}
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else {return}
do {
let show = try
JSONDecoder().decode(RecentTvList.self, from: data)
print(show)
} catch let jsonErr {
print("Error serializing JSON", jsonErr)
}
}.resume()
struct RecentTvListData: Decodable {
var data: [RecentTvList]
}
struct RecentTvList: Decodable {
var title: String?
var poster: String?
}
答案 0 :(得分:2)
我在你的回复中看到的问题是
data: []
实际上你得到这个词典回复
{
_id: 100284,
poster: "urlstring",
title: "Happy!"
}
in to Array
并且您正在直接尝试传递包含Data
字典数组的响应RecentTvList
,其仅接受Dictionary
这就是为什么它无法识别关键title
1}}作为错误建议
修改强>
尝试替换
let show = try
JSONDecoder().decode(RecentTvList.self, from: data)
用
let show = try
JSONDecoder().decode(RecentTvListData.self, from: data)
希望有助于解决您的问题
答案 1 :(得分:1)
struct RecentTvList: Decodable {
var title: String
var poster: String
var _id : Int
}
struct RecentTvListData: Decodable {
var data: [RecentTvList]
}
let str = """
{
"data": [
{
"_id": 100284,
"poster": "urlstring",
"title": "Happy!"
},
{
"_id": 100284,
"poster": "urlstring",
"title": "Happy!"
}
]
}
"""
do {
let show = try
JSONDecoder().decode(RecentTvListData.self, from: str.data(using: .utf8)!)
for tv in show.data {
print(tv._id)
}
} catch {
print(error)
}
答案 2 :(得分:0)
查看您提供的JSON。响应中没有变量名poster_url
。该值应该只是poster
。
另外,您省略了-id
变量。
我认为您的JSON结构应该是:
struct RecentTvListData: Decodable {
var data: [RecentTvList]
}
struct RecentTvList: Decodable {
var _id : Int
var poster : String
var title : String
}