Чтение из API JSON с использованием Alamofire Swift 4 - PullRequest
0 голосов
/ 02 июля 2018

Мне трудно читать JSON, используя Alamofire. ниже приведена структура ответа API

{
  "data": [
    {
        "order": {
            "id": 258,
            "created_at": "2018-07-01T14:51:05+08:00",
            "user_id": "1234"
        },
        "transactions": [
            {
                "transaction_type": "rent",
                "cabinet_id": "02110A0000C6",
                "jack_id": 1
            }
        ]
    }
 ]
}

По сути, мне нужно распечатать только массив transactions, а также распечатать по одному transaction_type, cabinet_id и jack_id Предыдущий мне просто удается напечатать ответ API, используя код ниже

        Alamofire.request(WalletRouter.urlUserActiveOrder(id: userId)).responseJSON { response in

            if let value = response.result.value {

                let dict = value as? Dictionary<String, AnyObject>

                //print (value)
                if let innerDict = dict!["data"]  {
                    print (innerDict) //manage to return the value

          let data = innerDict["transactions"] as! NSArray //get error here

                                            print (data)
                }

            }
            //do your json stuff
         else if (response.result.isFailure) {
            //Manager your error
            switch (response.error!._code){
            case NSURLErrorTimedOut:
                //Manager your time out error
                break
            case NSURLErrorNotConnectedToInternet:
                //Manager your not connected to internet error
                break
            default:
                print ("error")

            }
        }
    } 

Я уже потратил 6 часов, чтобы решить эту проблему, но все еще не смог получить значение.

1 Ответ

0 голосов
/ 03 июля 2018

Создайте класс структуры, как показано ниже

 struct Result: Decodable {
     struct data12: Decodable {
          struct transaction: Decodable {
            let transactionType:String
            let cabinetId:String
            let jackId:Int
        }
        let transactions:[transaction]
      }
     let data:[data12]
}

Данные извлекаются вот так

  do {
            let data1 = try Data(contentsOf: URL(fileURLWithPath: path), options: [])
            let decoder = JSONDecoder()
            decoder.keyDecodingStrategy = .convertFromSnakeCase
           let courses = try decoder.decode(Result.self, from: data1)
             print(courses)
         } catch {
            print(error)
        }

если кто-то считает, что мой подход неверен, обновите мой ответ TIA

...