ios - 一切都被正确解析,但一个元素总是拉空,即使它在 Json 中? swift 4.1

标签 ios json swift github

我正在尝试解析消息,但它每次都拉取 nil。如果它是一次或两次就好了,但它每次都会这样做。这里肯定出错了。

这是控制台输出的样子

commitJson(sha: "3665294d1e813d35594d6bcdc0a61983caa6e0cd", message: nil, url: "https://api.github.com/repos/apple/swift/commits/3665294d1e813d35594d6bcdc0a61983caa6e0cd", commit: GitHubCommits.commit(author: GitHubCommits.author(date: Optional("2018-10-03T19:12:15Z"), name: "Karoy Lorentey")))

它正在提取除消息以外的所有内容。我可能遗漏了一些东西,但我认为让我的代码说话会更好。对不起结构布局......

这是带有 json 的结构

struct author : Codable{
    var date: String
    var name: String
}
struct commit : Codable {
    var author: author
}
struct commitJson : Codable {
    var sha: String
    var message: String?
    var url: String

    var commit: commit
}

看起来不错吧?我需要可选的,否则它会撞到我....

这里是解析

guard let url = URL(string: "https://api.github.com/repos/apple/swift/commits?per_page=100") else {return}
    URLSession.shared.dataTask(with: url) { (data, statusCode, error) in

        //print(statusCode)
        if let error = error{
            print("error : \(error)")
            return
        }
        guard let data = data else {return}
        do{
            let decoder = JSONDecoder()

            self.commitsArray = try decoder.decode([commitJson].self, from: data)
            for commit in self.commitsArray{
                print(commit)
            }
        } catch {
            print("I have failed you with \(error)")
        }
    }.resume()

我觉得我没有做错任何事,但如果我没有做错,我就不会在这里。我尝试将其转换为字符串并将引号之类的内容切换回数据对象,但我要么弄错了,要么根本无济于事。

这是一个更简洁的示例,展示了我想要的东西。

*注意这一切都包含在开始和结束的数组括号中

{
    "sha": "80d765034c61d8bcad1d858cfa38ec599017a2f0",
    "commit": {
      "author": {
        "name": "swift-ci",
        "date": "2018-10-08T18:59:06Z"
      }
      "message": "Merge pull request #19764 from tokorom/vim-syntax-case-label-region",

    }

这是 GitHub 完整数据 block 示例的示例。

 {
        "sha": "80d765034c61d8bcad1d858cfa38ec599017a2f0",
        "node_id": "MDY6Q29tbWl0NDQ4Mzg5NDk6ODBkNzY1MDM0YzYxZDhiY2FkMWQ4NThjZmEzOGVjNTk5MDE3YTJmMA==",
        "commit": {
          "author": {
            "name": "swift-ci",
            "email": "swift-ci@users.noreply.github.com",
            "date": "2018-10-08T18:59:06Z"
          },
          "committer": {
            "name": "GitHub",
            "email": "noreply@github.com",
            "date": "2018-10-08T18:59:06Z"
          },
          "message": "Merge pull request #19764 from tokorom/vim-syntax-case-label-region",
          "tree": {
            "sha": "d6bd4fe23f4efabcfee7fbfb6e91e5aac9b4bf6d",
            "url": "https://api.github.com/repos/apple/swift/git/trees/d6bd4fe23f4efabcfee7fbfb6e91e5aac9b4bf6d"
          },
          "url": "https://api.github.com/repos/apple/swift/git/commits/80d765034c61d8bcad1d858cfa38ec599017a2f0",
          "comment_count": 0,
          "verification": {
            "verified": true,
            "reason": "valid",
            "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJbu6j6CRBK7hj4Ov3rIwAAdHIIAKv4lE8AwQ/hrqfjNaOdW/EW\nsFqNisjTOhj1YiW64VSU7l2uztogJJG0Shl/+zQQQGFNVcvxlNXjq3JF9rrThrPl\nFKwvNZoSZBgNoEbTNoMPCkS+GMVDlMw96VVHrSo4Nae4yiU+Y+WSnCqf6I+TUSRp\n5JyL6oMlSqaihgq9gkIqlDnp6i0lRJWtMyGJ7xUrJ0C985RyGyb6fG20/34UJ4TT\nzT/Beb0RyYOdwnXy+mOm/NnmhcVozOrBbZlR3X2e4myQJ6Q7INOOyYPpmAZxEXps\nmajg6J73cwaH2x6PxRmMJ3+qxCau+bX3v4pEEeT5nYEIH+hDK2uC2wC/PkM7VsU=\n=2jhi\n-----END PGP SIGNATURE-----\n",
            "payload": "tree d6bd4fe23f4efabcfee7fbfb6e91e5aac9b4bf6d\nparent 52deae30eb5833e53ba68ebc8a9a87614630751d\nparent ea2c860ddb4817dc83c7152035aa05569f3a2770\nauthor swift-ci <swift-ci@users.noreply.github.com> 1539025146 -0700\ncommitter GitHub <noreply@github.com> 1539025146 -0700\n\nMerge pull request #19764 from tokorom/vim-syntax-case-label-region\n\n"
          }
        }

这是 API 的链接。它确实有大约每小时 60 个请求,没有 API key 限制,所以要小心。

GitHub Json Swift

最佳答案

messagecommit 的一部分,而不是外部对象的一部分。

你需要:

struct author : Codable{
    var date: String
    var name: String
}

struct commit : Codable {
    var author: author
    var message: String?
}

struct commitJson : Codable {
    var sha: String        
    var url: String    
    var commit: commit
}

关于ios - 一切都被正确解析,但一个元素总是拉空,即使它在 Json 中? swift 4.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712780/

相关文章:

javascript - 如何返回自定义表单字段的值

javascript - 为什么 Karma 拒绝提供我的 JSON fixture(我想在我的 jasmine/angularjs 测试中使用)

Java map 中的 map ,REST Web 服务

ios - Realm 关系的谓词,检查列表是否为空

ios - 如何更改 UISwitch 的状态以使其显示在关闭位置?

ios - 来自图像集的 iphone 动画

ios - 项目 ...xcodeproj 无法打开,因为它缺少其 project.pbxproj 文件

objective-c - UIPickerView - 从委托(delegate)中获取选择

ios - 在 IOS 上从 S3 存储桶下载时出错。

ios - 实例化初始 View Controller 提供 Nil