Как правильно разобрать JSON с Alamofire и SwiftyJSON - PullRequest
0 голосов
/ 16 февраля 2019

Моя цель - получить самое верхнее поле "browser_download_url" для этих данных JSON , чтобы я мог использовать его для поиска новейшей версии приложения на Github.

I 'В настоящее время я использую Swift 4.2 с Alamofire для получения сетевых данных и SwiftyJSON для анализа данных.


Я начал с теста, чтобы я мог освоить его, используя этот простой Сначала данные JSON .

Это мой код

    Alamofire.request("https://jsonplaceholder.typicode.com/todos").responseJSON { (responseData) -> Void in
        if((responseData.result.value) != nil) {
            let swiftyJsonVar = JSON(responseData.result.value!)
            if let test = swiftyJsonVar[0]["title"].string {
                print(test)

При выполнении кода будет напечатано test как delectus aut autem, что является правильным из данных JSON.


Хотя япопытайтесь использовать код для моей первоначальной цели, как показано ниже:

    Alamofire.request("https://api.github.com/repos/s0uthwest/futurerestore/releases/latest").responseJSON { (responseData) -> Void in
        if((responseData.result.value) != nil) {
            let swiftyJsonVar = JSON(responseData.result.value!)
          //  print(swiftyJsonVar)
            if let test = swiftyJsonVar[0]["assets"]["browser_download_url"].string {
                print(test)

Хотя выполнение кода ничего не дает.Я уверен, что это проблема с тем, как я пытаюсь получить browser_download_url, поэтому я не уверен, что делать дальше.

1 Ответ

0 голосов
/ 16 февраля 2019

Это очень просто с Codable.

  1. Создать struct

    struct Item: Codable {
        let userId: Int
        let id: Int
        let title: String
        let completed: Bool
    }
    
  2. В обработчике завершения Alamofire выпросто расшифруйте его так:

    let decoder = JSONDecoder()
    
    do {
        // don't force unwrap in your project
        var yourStructs = try decoder.decode([Item].self, from: data!)
        print("yourStructs contains \(String(yourStructs.count)) items")
    } catch {
        print("kaboom!", error)
    }
    
...