Все анализируется правильно, но один элемент всегда обнуляется, даже если он находится внутри Json?Swift 4.1 - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь разобрать сообщения, и это просто тянет ноль КАЖДЫЙ раз.Было бы хорошо, если бы это было как один или два раза, но он делает это каждый раз, так что-то есть.определенно идет не так здесь.

Вот как выглядит вывод консоли

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Пример выглядит так:

 {
        "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, так что будьте осторожны с этим.

GitHub Json Swift

1 Ответ

0 голосов
/ 09 октября 2018

message является частью commit, а не частью внешнего объекта.

Вам нужно:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...