Как прочитать json файл в диспетчере файлов Swift? - PullRequest
0 голосов
/ 23 января 2020

Я попытался прочитать файл json в zip-файле, после того, как файл, загруженный с помощью alamofire, я извлек файл с помощью SSZipArchive. Я получаю 2 json файла из zip, но не могу прочитать содержимое json. Как я могу прочитать этот файл?

вот мой код:

 @IBAction func downloads(_ sender: UIButton){

    let urlString : String = ""
    let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)



    Alamofire.download(urlString, method: .get, encoding: URLEncoding.default, to: destination)
        .downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
            print("Progress: \(progress.fractionCompleted)")
            print(progress)
        }
        .validate { request, response, temporaryURL, destinationURL in
            return .success
        }
        .responseJSON { response in


            print(response)
            debugPrint(response)
            print(response.destinationURL?.path)
            print(response.destinationURL?.absoluteString)
            let fileName = response.destinationURL!.path

            guard let unzipDirectory = self.unzipPath(fileName: fileName) else {return}

            let success = SSZipArchive.unzipFile(atPath: (response.destinationURL?.path)!, toDestination: unzipDirectory)
            print(success)

            print(unzipDirectory)
            if !success {
                return
            }



            var items: [String]
            do {
                items = try FileManager.default.contentsOfDirectory(atPath: unzipDirectory)

                for item in items{
                    print("jsonFile: \(item)")
                }



            } catch {
                return
                }
    }
}

  func unzipPath(fileName:String) -> String? {
    let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
    let pathWithComponent = path.appendingPathComponent("\(fileName)")
    do {
        try FileManager.default.createDirectory(atPath: pathWithComponent, withIntermediateDirectories: true, attributes: nil)
    } catch {
        return nil
    }
    return pathWithComponent
}

этот скриншотОтвет:

enter image description here

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Попробуйте следующее

  • , получая путь для этого json

    let path = Bundle.main.path(forResource: "test", ofType: "json") 
    
  • , преобразующего в данные

    let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
    
  • декодирование в отражающую модель

     //make a model to reflect your json and place it instead of "CustomModel".self
    let model = JSONDecoder().decode(CustomModel.self, from: data)
    

надеюсь, это поможет!

0 голосов
/ 23 января 2020

Не уверен, но для JSON Доступно для чтения вы можете вызвать этот метод

func readJson() {
    let url = Bundle.main.url(forResource: "input_ios", withExtension: "json")
    let data = NSData(contentsOf: url!)
    do {
        let object = try JSONSerialization.jsonObject(with: data! as Data, options: .allowFragments)
        if let dictionary = object as? [String: AnyObject] {
            if let Timeline = dictionary["timeline"] as? [[String:Any]] {
                timelArr = Timeline
                feedTbl.reloadData()
            }
        }
    } catch {
    }
}

и изменить имя файла (имя вашего файла), а затем получить данные. здесь я показываю в виде таблицы.

 if let Timeline = dictionary["timeline"] as? [[String:Any]] 

в файле имеет ключ временной шкалы, поэтому изменения, которые есть в вашем файле.

...