如何在文件管理器中快速读取 json 文件?

Posted

技术标签:

【中文标题】如何在文件管理器中快速读取 json 文件?【英文标题】:how to read json file in filemanager swift? 【发布时间】:2020-01-23 03:40:29 【问题描述】:

我尝试读取 zip 文件中的 json 文件,在我使用 alamofire 下载的文件之后,我使用 SSZipArchive 提取了文件。我从 zip 中得到 2 个 json 文件,但我无法读取 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

这个截图回应:

【问题讨论】:

【参考方案1】:

不确定,但对于 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 
    

并更改文件名(您的文件名),然后获取数据。 这里我显示在 tableview 中。

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

文件中有时间轴键,因此可以更改文件中的任何内容。

【讨论】:

【参考方案2】:

试试下面的

获取该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)

希望这会有所帮助!

【讨论】:

以上是关于如何在文件管理器中快速读取 json 文件?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何读取json文件,在本地有E:/a.json文件,想读取这个json文件里面的内容,怎样实现

如何在 Ionic 中正确读取 JSON 文件?

如何在javascript中从json文件中读取数据

如何在 CodeIgniter 控制器中读取 JSON 文件

如何从 json 文件中读取数据,是不是有语法错误?

如何使用 Dojo 读取 JSON 文件