当前位置: 首页 > 知识库问答 >
问题:

Swift 4 json解码器错误flickr

松高歌
2023-03-14

我正在swift 4中试用新的JSONDecoder(),并试图解析以下flickr API响应:(https://API.flickr.com/services/rest/?api_key=api_key&method=flickr.photos.search&format=json&per_page=25&text=hello&nojsonCallback=1).但是,我得到一个错误,说“错误处理json数据:数据不能被读取,因为它的格式不正确。”然而,数据似乎是在正确的格式对我。我做错什么了吗?

            let dataTask = session.dataTask(with: urlRequest) { (data, response, error) in
                if let error = error {
                    print("json error: \(error.localizedDescription)")
                    return
                } else if let data = data {
                    print(response)
                    do {
                        let decoder = JSONDecoder()
                        print(data)
                        let flickrPhotos = try decoder.decode(FlickrImageResult.self, from: data)
                    } catch {
                        dump(data)
                        print("json error: \(error.localizedDescription)")
                    }
                }
            }
            dataTask.resume()

我的数据模型

struct FlickrImageResult : Codable {
     var photos : FlickrPhoto? = nil

}

struct FlickrPhoto : Codable {
    var photo : [FlickrURLs]? = nil
 }

struct FlickrURLs: Codable {
    var id : String? = nil
    var owner: String? = nil
    var secret: String? = nil
    var server: String? = nil
    var farm: String? = nil
}

我将请求的图像数更改为2,打印出的数据返回可选({“photos”:{“page”:1,“pages”:120197,“perpage”:2,“total”:“240393”,“photo”:[{“id”:“36729752762”,“owner”:“152440263@N02”,“secret”:“E62BA3E18B”,“server”:“4432”,“farm”:5,“title”:“Hello there”,“ispublic”:1,“isfriend”:0,“isfamily”:0},{“id”:“36729384952”,“

共有1个答案

华季同
2023-03-14

您的模型的唯一问题是farm实际上是一个int。以下是您的模型的更完整版本,它与文档(https://www.flickr.com/services/api/flickr.photos.search.html)一致:

struct FlickrImageResult: Codable {
    let photos : FlickrPagedImageResult?
    let stat: String
}

struct FlickrPagedImageResult: Codable {
    let photo : [FlickrURLs]
    let page: Int
    let pages: Int
    let perpage: Int
    let total: String
}

struct FlickrURLs: Codable {
    let id : String
    let owner: String
    let secret: String
    let server: String
    let farm: Int
    // let title: String
    // If needed, camel-case and use CodingKeys enum
    //let ispublic: Int
    //let isfriend: Int
    //let isfamily: Int
}

let jsonData = """
{
  "photos": {
    "page": 1,
    "pages": 13651,
    "perpage": 25,
    "total": "341263",
    "photo": [
      {
        "id": "36499638920",
        "owner": "55126206@N07",
        "secret": "7e82dee0ba",
        "server": "4346",
        "farm": 5,
        "title": "[BREATHE]-Ririko,Sayaka&Chiyoko",
        "ispublic": 1,
        "isfriend": 0,
        "isfamily": 0
      },
      {
        "id": "36724435032",
        "owner": "92807782@N04",
        "secret": "6d830d4a75",
        "server": "4354",
        "farm": 5,
        "title": "Serendipity Designs @ SWANK August 2017",
        "ispublic": 1,
        "isfriend": 0,
        "isfamily": 0
      },
      {
        "id": "36087089863",
        "owner": "152685136@N08",
        "secret": "a4a3f2fe0a",
        "server": "4365",
        "farm": 5,
        "title": "Hello Kitty Scooter",
        "ispublic": 1,
        "isfriend": 0,
        "isfamily": 0
      },
      {
        "id": "36086949593",
        "owner": "151818203@N02",
        "secret": "fc1207d373",
        "server": "4334",
        "farm": 5,
        "title": "Hip, Hip! It's Chip!",
        "ispublic": 1,
        "isfriend": 0,
        "isfamily": 0
      },
      {
        "id": "36498504410",
        "owner": "148300038@N02",
        "secret": "5c7f6ff3e1",
        "server": "4391",
        "farm": 5,
        "title": "Hello Kotti",
        "ispublic": 1,
        "isfriend": 0,
        "isfamily": 0
      }
    ]
  },
  "stat": "ok"
}
""".data(using: .utf8)!

let flickrPhotos = try! JSONDecoder().decode(FlickrImageResult.self, from: jsonData)
print(flickrPhotos)


p.s:消息处理json数据时出错:无法读取数据,因为它的格式不正确。是本地化的错误消息,请使用print(错误)而不是print(错误localizeddescription)获取所有可用的错误数据(在您的情况下,它将显示尝试解码场密钥时出现问题)。

 类似资料:
  • 我已经创建了服务'A',它需要由服务'B'通过使用假客户端调用,如果服务'A'由于某些验证而失败,那么服务'A'会发送回包含以下详细信息的错误响应,(1)http状态代码(2)错误消息(3)自定义错误映射,它包含自定义错误代码和它们的错误消息,例如<“EMP-1001”,“无效雇员ID”> 请就此提供一些建议

  • 我试图训练我的模型,我有csv文件和一个gz文件,这是早些时候生成的。我得到这个错误如下所述,不确定是什么错误。 霉菌代码:

  • 代码 说明 102 视频列表为空 103 无效的视频列表 108 列表模式视频信息加载失败 109 视频信息加载失败 110 视频审核中 111 用户流量已用尽 112 用户账号被锁 114 视频被屏蔽或删除 115 视频信息错误 116 无视频文件 205 当前域名不允许播放 207 授权播放验证未通过 304 测速失败 305 切换清晰度失败 306 播放中播放失败

  • 我正在尝试解密服务器上的加密字符串。但当我解密的时候,我发现了错误。我需要成功解密字符串。我们正在使用AES 256 cbc 当我使用aes/cbc/nopadding时,我能够解密,但是文本中附加了垃圾字符。 解密A:2:{S:5:“电子邮件”;S:24:“afroj.alam@broc.com”;S:8:“密码”;S:7:“test123”;} 实际字符串A:2:{S:5:“email”;S:

  • sdk v1.1.4 版本重构优化了错误返回信息,你可以通过如下方式对错误信息进行判断。 wx.BaaS.login().then(res => { console.log('登录成功') }, err => { if (err.code === 600) { console.log('网络已断开') } if (err.code === 601) { console.

  • 问题内容: 当我尝试从http://api-v3.deezer.com/1.0/search/album/?q=beethoven&index=2&nb_items=2&output=json使用以下方法获取JSON 时: 我得到: 但是使用http://search.twitter.com/search.json?q=beethoven&callback=?&count=5的JSON 可以正常工