2016-10-31 3 views
1

У меня есть файлы JSON в разделе. Я загружаю их и сохраняю их в каталоге документов. Но я не могу их прочитать. Вот мой код:Как я могу прочитать json-файл в каталоге документов в swift?

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]) 
    let textFileURL = documentsPath.appendingPathComponent("resource/data/introduction") 
    let fileURLString = textFileURL?.path 
    if FileManager.default.fileExists(atPath: (fileURLString)!){ 
     print("success") 
    } 
    if let path = Bundle.main.path(forResource: "test" , ofType: "json") { 
     do { 
      let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .alwaysMapped) 
      let jsonObj = JSONSerializer.toJson(data) 
      print(jsonObj) 
     } catch let error { 
      print(error.localizedDescription) 
     } 
    } else { 
     print("Invalid filename/path.") 
    } 
+0

, что печатает ваше приложение? – Vyacheslav

+0

Что такое 'JSONSerializer', это ваш или из библиотеки? Пожалуйста, дайте более подробную информацию и контекст. – Moritz

+0

«Недопустимое имя файла/путь». – Humyl

ответ

0

Если вы измените эту строку:

let jsonObj = JSONSerializer.toJson(data) 

к этому:

let jsonObj = try JSONSerialization.jsonObject(with:data, options:JSONSerialization.ReadingOptions(rawValue:0)) 

Код должен работать. Я не знаю, откуда появилась первая строка, - возможно, вы используете стороннюю библиотеку? Если это так, вы можете указать, что используете, чтобы мы могли видеть все элементы, входящие в код.

Если вы используете стандартную библиотеку сериализации JSON, и код был простой ошибкой ввода или что-то еще, не могли бы вы также указать, какая ошибка вы видите или что происходит, когда код не работает?

+0

, но файл не существует – Humyl

+0

Если файл не существует, значит, проблема связана с загрузкой и сохранением кода. Вы пытались помещать статический файл в указанное вами место, а затем тестируете свой код? Или ваша проблема в том, что у вас нет файла для обработки в первую очередь? – Fahim

+0

Это существует, Bundle.main.path (forResource: «resource/data/introduction», ofType: «json» = nil. – Humyl

-1

У меня была такая же проблема, но, изучая и составляя информацию о решении проблем, здесь я оставляю вам свою работу, я надеюсь помочь.

import UIKit 

class ViewController: UIViewController { 


override func viewDidLoad() { 
    super.viewDidLoad() 

//llamar metodo para descargar json 
     descargar() 

} 

//------------------Descargar json-------------------------------------------------------- 
func descargar() { 

    //Create URL to the source file you want to download 
    let fileURL = URL(string: "http://10.32.14.124:7098/Servicio.svc/getCentralesMovilJSON/") 

    // Create destination URL 
    let documentsUrl:URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL! 

    //agregar al destino el archivo 
    let destinationFileUrl = documentsUrl.appendingPathComponent("centrales.json") 

    //archivo existente???.................................................... 
    let fileExists = FileManager().fileExists(atPath: destinationFileUrl.path) 

    let sessionConfig = URLSessionConfiguration.default 
    let session = URLSession(configuration: sessionConfig) 

    let request = URLRequest(url:fileURL!) 

    // si el archivo centrales.json ya existe, no descargarlo de nuevo y enviar ruta de destino......................................................................... 
    if fileExists == true { 
     print("archivo existente") 
     print(destinationFileUrl ) 
     //llamar metodo para parsear el json............................................ 
     parseo() 

    } 

// si el archivo centrales.json aun no existe, descargarlo y mostrar ruta de destino.......................................................................... 
    else{ 
     print("descargar archivo") 

    let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in 
     if let tempLocalUrl = tempLocalUrl, error == nil { 
      // Success se ah descargado correctamente................................... 
      if let statusCode = (response as? HTTPURLResponse)?.statusCode { 
       print("Successfully downloaded. Status code: \(statusCode)") 
       print(destinationFileUrl) 
       //llamar metodo para parsear el json............................................ 
       self.parseo() 
      } 

      do { 
       try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl) 
      } catch (let writeError) { 
       print("Error creating a file \(destinationFileUrl) : \(writeError)") 
      } 

     } else { 
      print("Error took place while downloading a file. Error description: %@", error?.localizedDescription); 
     } 
     } 
    task.resume() 

    }} 




//-----------------------------Extraer datos del archivo json---------------------------- 

func parseo(){ 

    let documentsUrl:URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL! 
    let destinationFileUrl = documentsUrl.appendingPathComponent("centrales.json") 




    do { 

     let data = try Data(contentsOf: destinationFileUrl, options: []) 
     let centralArray = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] ?? [] 

     print(centralArray) 


    }catch { 
     print(error) 
    } 

} 

}

+0

Пожалуйста, измените текст на английский. – Catalyst

 Смежные вопросы

  • Нет связанных вопросов^_^