首页 文章

序列化JSON解析时出错 - 解码

提问于
浏览
0

我在使用swift 4解码和解析这个JSON文件数据时遇到了问题 . 我不知道如何在代码的底部构造我的结构,以便它们可以遍历我的数组字典数据 . 即 . 数据[0],数据[1],数据[2]等 . 这是我遇到的错误:

序列化JSON keyNotFound时出错(whatsong.RecentTvList . (_882383248D6F034EC588461F3FFE705E中的CodingKeys).title,Swift.DecodingError.Context(codingPath:[],debugDescription:"No value associated with key title (" 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?
}

3 回答

  • 2

    我在你的回答中看到的问题是

    data: []

    实际上你得到这个字典的回复

    {
        _id: 100284,
        poster: "urlstring",
        title: "Happy!"
        }
    

    在数组中

    并且您正在直接尝试传递响应 Data ,其中包含 RecentTvList 中的字典数组,其中只接受 Dictionary 这就是为什么它无法识别键 title 为错误建议

    EDIT

    尝试更换

    let show =  try
                JSONDecoder().decode(RecentTvList.self, from: data)
    

    let show =  try
                JSONDecoder().decode(RecentTvListData.self, from: data)
    

    希望有助于解决您的问题

  • 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)
            }
    
  • 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
    
    }
    

相关问题