为什么json返回nil?

时间:2018-12-25 08:58:05

标签: swift

我解析json没什么问题
我需要返回der_link
我执行此代码

struct Welcome: Codable {
    let statusCode: Int
    let message: String
    let content: Content?
}

struct Content: Codable {
    let course: Course
    let lesson: Lesson
}

struct Course: Codable {
    let id: Int
    let slug, title: String
    let passed: Int

    enum CodingKeys: String, CodingKey {
        case id, slug, title
        case passed
    }
}

struct Lesson: Codable {
    let id, position: Int
    let title, slug, rules, words: String
    let image: String
    let passed: Int
    let der_link: String?

    enum CodingKeys: String, CodingKey {
        case id, position, title, slug, rules, words, image
        case passed
        case der_link
    }
}  

这是我的json

{
"statusCode": 200,
"message": "Информация об уроке",
"content": {
    "course": {
        "id": 1,
        "slug": "kurs-a1",
        "title": "Курс А1",
        "can_access": 1,
        "passed": 1,
        "sections": []
    },
    "lesson": {
        "id": 3,
        "position": 2,
        "title": "Танысу",
        "slug": "tanysu",
        "rules": "<p align=\"center\"><strong><span lang=\"KZ\">-Бұл кім?</span></strong></p>\r\n<p align=\"center\"><strong><span lang=\"KZ\">-Бұл менің досым.</span></strong></p>\r\n<p><span lang=\"KZ\">В казахском языке существуют притяжательные окончания существительных, которые показывают принадлежность предмета, явления первому, второму, третьему лицу. К словам обозначающим названия предмета обладания, прибавляются окончания притяжетельной формы, а слова, обозначающие название обладателя предмета, отвечает на вопрос КІМНІҢ? НЕНІҢ?</span></p>\r\n<p><span lang=\"KZ\">Категория принадлежности образуется путем прибавления к сущестительным в единственном и множественном числе следующих окончаний:</span></p>\r\n<table border=\"1\" width=\"442\" cellspacing=\"0\" cellpadding=\"0\">\r\n<tbody>\r\n<tr>\r\n<td valign=\"top\" width=\"339\">\r\n<p><span lang=\"KZ\">Менің (мой) ... </span>&ndash;ым/<span lang=\"KZ\">ім/м</span><span lang=\"KZ\">&nbsp;</span></p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"339\">\r\n<p><span lang=\"KZ\">Сенің (твой) ... +ың/ің/ң</span><span lang=\"KZ\">&nbsp;</span></p>\r\n<p><span lang=\"KZ\">Сіздің(Ваш,Ваша,Ваши) ...</span></p>\r\n<p><span lang=\"KZ\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... ыңыз/іңіз</span></p>\r\n<p><span lang=\"KZ\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...ңыз/ңіз&nbsp;</span><span lang=\"KZ\">&nbsp;</span></p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"339\">\r\n<p><span lang=\"KZ\">Оның ...&ndash;сы/сі/</span></p>\r\n<p><span lang=\"KZ\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&ndash;ы/і</span></p>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>&nbsp;</p>\r\n<p style=\"text-align: center;\"><span lang=\"KZ\">Есте сақтаңыз!</span></p>\r\n<p align=\"center\"><span lang=\"KZ\">Запомните!</span></p>\r\n<p align=\"center\">&nbsp;</p>\r\n<table border=\"1\" width=\"548\" cellspacing=\"0\" cellpadding=\"0\">\r\n<tbody>\r\n<tr>\r\n<td valign=\"top\" width=\"554\">\r\n<p align=\"center\"><span lang=\"KZ\">Местоимения менің, сенің и т.д. часто в речи опускаются, поскольку само окончание выполняет их функции. Русское словосочетание мой друг</span></p>\r\n<p align=\"center\"><span lang=\"KZ\">по-казахски передается как досым или менің досым.</span></p>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>&nbsp;</p>\r\n<p><span lang=\"KZ\">Менің</span><span lang=\"KZ\"> - атым, есімім, аты-жөнім, тегім, жұмысым, жаңалығым</span></p>\r\n<p><span lang=\"KZ\">Сенің</span><span lang=\"KZ\"> &ndash; атың, есімің, аты-жөнің, тегің, жұмысың, жаңалығың</span></p>\r\n<p><span lang=\"KZ\">&nbsp;</span></p>\r\n<p><span lang=\"KZ\">Менің </span>&ndash; мой, моя, мое, меня, у меня</p>\r\n<p><span lang=\"KZ\">Менің&nbsp; ....... </span>+ ым/<span lang=\"KZ\">ім/м</span></p>\r\n<p><span lang=\"KZ\">&nbsp;</span></p>\r\n<p>- <span lang=\"KZ\">ым &ndash; </span><span lang=\"KZ\">добавляется после согласных звуков, где последний слог твердый гласный звук&nbsp; (а, о, ы, ұ, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">ім&ndash; </span><span lang=\"KZ\">добавляется после согласных&nbsp; звуков,&nbsp; где&nbsp; последний слог мягкий гласный звук&nbsp; (ә, ө, і, ү,е, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">м &ndash; </span><span lang=\"KZ\">добавляется после гласных звуков,не зависимо мягкие или твердые гласные </span></p>\r\n<p>&nbsp;</p>\r\n<p><span lang=\"KZ\">Сенің </span>&ndash; <span lang=\"KZ\">тв</span>ой, <span lang=\"KZ\">тво</span>я, <span lang=\"KZ\">тв</span>ое, <span lang=\"KZ\">теб</span>я, у <span lang=\"KZ\">теб</span>я</p>\r\n<p><span lang=\"KZ\">Сенің&nbsp; ....... + ың/ің/ң</span></p>\r\n<p><span lang=\"KZ\">- ың &ndash; </span><span lang=\"KZ\">добавляется после согласных звуков, где последний слог твердый гласный звук&nbsp; (а, о, ы, ұ, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">ің &ndash; </span><span lang=\"KZ\">добавляется после согласных&nbsp; звуков,&nbsp; где&nbsp; последний слог мягкий гласный звук&nbsp; (ә, ө, і, ү,е, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">ң &ndash; </span><span lang=\"KZ\">добавляется после гласных звуков,не зависимо мягкие или твердые гласные </span></p>\r\n<p><span lang=\"KZ\">&nbsp;</span></p>\r\n<p><span lang=\"KZ\">Сіздің </span>&ndash; <span lang=\"KZ\">Ваш, Ваше, Ваша, Вас, у вас</span></p>\r\n<p><span lang=\"KZ\">Сіздің&nbsp; ....... + ыңыз/іңіз/ңыз/ңіз</span></p>\r\n<p><span lang=\"KZ\">- ыңыз &ndash; </span><span lang=\"KZ\">добавляется после согласных звуков, где последний слог твердый гласный звук&nbsp; (а, о, ы, ұ, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">іңіз &ndash;&nbsp; </span><span lang=\"KZ\">добавляется после согласных&nbsp; звуков,&nbsp; где&nbsp; последний слог мягкий гласный звук (ә, ө, і, ү,е, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">ңыз &ndash; </span><span lang=\"KZ\">добавляется после твердых гласных (а, о, ы, ұ, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">ңіз &ndash; </span><span lang=\"KZ\">добавляется после&nbsp; мягких гласных (ә, ө, і, ү, (у, и))</span></p>\r\n<p>&nbsp;</p>\r\n<p><span lang=\"KZ\">Оның </span>&ndash; <span lang=\"KZ\">его/ее, у него/ у нее</span></p>\r\n<p><span lang=\"KZ\">Оның&nbsp; ....... + ы/і/сы/сі</span></p>\r\n<p>- <span lang=\"KZ\">ы &ndash; </span><span lang=\"KZ\">добавляется после согласных звуков, где последний слог твердый гласный звук&nbsp; (а, о, ы, ұ, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">і &ndash; </span><span lang=\"KZ\">добавляется после согласных&nbsp; звуков,&nbsp; где&nbsp; последний слог мягкий гласный звук&nbsp; (ә, ө, і, ү,е, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">сы &ndash; </span><span lang=\"KZ\">добавляется после твердых гласных (а, о, ы, ұ, (у, и))</span></p>\r\n<p>- <span lang=\"KZ\">сі&nbsp; &ndash; </span><span lang=\"KZ\">добавляется после&nbsp; мягких гласных (ә, ө, і, ү, (у, и))</span></p>\r\n<p>&nbsp;</p>\r\n<p align=\"center\"><strong><span lang=\"KZ\">ҮЛГІ:</span></strong></p>\r\n<p align=\"center\"><strong><span lang=\"KZ\">ОБРАЗЕЦ:</span></strong></p>\r\n<p><span lang=\"KZ\">Менің ат + ым (есім+ім)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>\r\n<p><span lang=\"KZ\">Сенің ат + ың (есім+ің)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>\r\n<p><span lang=\"KZ\">Сіздің ат + ыңыз (есім+іңіз) &nbsp;&nbsp;</span></p>\r\n<p><span lang=\"KZ\">Оның&nbsp;&nbsp; ат+ы(есім+і)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>",
        "words": "<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\r\n<tbody>\r\n<tr>\r\n<td colspan=\"3\" valign=\"top\" width=\"566\">\r\n<p align=\"center\"><strong><span lang=\"KZ\">ІІ Танысу</span></strong></p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>1</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Аты</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Имя</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>2</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Тегі</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Фамилия</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>3</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Аты-жөні</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Имя, отчество</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>5</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Аты-жөніңіз кім?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Как Ваша фамилия, имя и отчество?</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">6</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Аты-жөнің кім?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Как твоя фамилия, имя и отчество?</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">7</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Менің</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Мой, моя, мое</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">8</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Сіздің</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Ваш, Ваша, Ваше</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">9</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Сенің</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Твой, твоя, твое</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">10</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Оның</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Его, ее, у него</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>11</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Кешіріңіз</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Извините</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>12</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Кешір</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Извини</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>13</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Атыңыз кім?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Как Вас зовут?</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p>14</p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Атың кім?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Как тебя зовут?</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">15</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Қандай жаңалығыңыз бар?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Что нового (у Вас)? (уваж. форм.)</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">16</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Қандай жаңалығың бар?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Что нового (у тебя)? (прост. форм.)</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">17</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Жұмысыңыз қалай?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Как работа? (уваж. форм.)</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">18</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Жұмысың қалай?</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Как работа? (прост. форм.)</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">19</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Танысып қой</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Познакомься (прост. форм.)</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">20</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Танысып қойыңыз</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Познакомьтесь (уваж. форма, ед. чис.)</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">21</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Танысып қояйық!</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Давайте познакомимся (мн. ч.)</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">22</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Танысқаныма қуаныштымын</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Рад/а знакомству</p>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td valign=\"top\" width=\"32\">\r\n<p><span lang=\"KZ\">23</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"266\">\r\n<p><span lang=\"KZ\">Мен де қуаныштымын</span></p>\r\n</td>\r\n<td valign=\"top\" width=\"267\">\r\n<p>Я тоже рад/рада</p>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>&nbsp;</p>",
        "image": "https://tilqural.kz/assets/img/default-lesson-icon.png",
        "can_access": 1,
        "passed": 1,
        "der_link": "https://tilqural.kz/files/ders/1544698668/index_TINCAN.html?endpoint=https%3A%2F%2Flrs.panama.kz%2Fdata%2FxAPI%2F&auth=ZTU5Zjg0Nzk4ZDYxMjE0YmQ5ZDEyZDk0YmVkNmZlOTAyYzIzYmM0YzozNzE4NjgzMzA1MmEyNDlkOTlhYjVkNjg1ODViMjJmNTg4MGU5ODU3&actor=%7B%22name%22%3A%5B%22%D0%92%D0%B0%D1%81%D0%B8%D0%BB%D1%8C%D0%B5%D0%B2+%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D0%B9%22%5D%2C%22mbox%22%3A%5B%22thedexire%40mail.ru%22%5D%7D&activity_id=https%3A%2F%2Ftilqural.kz%2Fru%2Flesson%2Ftanysu&unit_id=lesson_3"
    }
}

} 但der_link总是返回nil
为什么? 请帮我 谢谢

 var arrData1 = [Content]()
var lang = UserDefaults.standard.string(forKey: "lang")
var user = UserDefaults.standard.string(forKey: "user_id")

func getreq(){
    let user_id = user!
    let lang_id = lang!
    let hash_salt = "cX0YIsQlZQsLhoFOLEkw"
    let input_hash = "\(lang_id)3\(user_id)\(hash_salt)"
    let digest = input_hash.utf8.md5
    let md5 = digest.rawValue
    print(lesson_id)

    let string = "https://tilqural.kz/api/v1/education/lesson?lesson_id=3"
    let url = NSURL(string: string)
    let request = NSMutableURLRequest(url: url! as URL)
    request.setValue(md5, forHTTPHeaderField: "hash")
    request.setValue("application/x.LMS.v1+json", forHTTPHeaderField: "Accept")
    request.setValue(user_id, forHTTPHeaderField: "user")
    request.setValue(lang_id, forHTTPHeaderField: "language")
    request.httpMethod = "GET"
    let session = URLSession.shared

    let mData = session.dataTask(with: request as URLRequest) { (data, response, error) -> Void in
        guard let data = data else { return }
        do {
            let decoder = JSONDecoder()
            decoder.keyDecodingStrategy = .convertFromSnakeCase
            let data_new = try decoder.decode(Welcome.self, from: data)

            DispatchQueue.main.async {
                print("It is derLink")
                print("\(String(describing: data_new.content?.lesson.der_link))" )
                print("\(String(describing: data_new.content?.lesson))" )
            }

        } catch {
            print("Error in CheckNew is : \n\(error)")
        }
    }
    mData.resume()

}

2 个答案:

答案 0 :(得分:1)

您已使用convertFromSnakeCase

decoder.keyDecodingStrategy = .convertFromSnakeCase

因此,der_link被转换为derLink。您的Lesson结构体没有derLink属性,因此该键的值将被忽略。

您应该:

  • 将属性和编码键重命名为derLink,或;
  • 删除行decoder.keyDecodingStrategy = .convertFromSnakeCase

答案 1 :(得分:0)

将设置keyDecodingStrategy设置为.convertFromSnakeCase,因为您的属性命名为der_link,并且此策略将键der_link转换为derLink,因此您的der_link属性未分配并且停留在nil

decoder.keyDecodingStrategy = .convertFromSnakeCase // `der_link` --> `derLink`

...或重命名您的财产

let derLink = String?