2017-08-26 1 views
0

Ich habe diese .plist- und .json-Dateien in meinem Projekt gespeichert. Ich konnte die .plist-Datei von Xcode lesen. Obwohl .json Datei auf Swift 3.0 nicht lesen konnte. Ich habe das folgende Code-Snippet verwendet, um dies zu erhalten. aber konnte das nicht tun. Ist es möglich, die Daten aus der .json Datei zu bekommen? bitte teilen Sie Ihre Vorschläge.Swift 3.0 - .JSON-Datei aus dem XCode-Bundle lesen

Konnte die PLIST Datei holen

let plistFile = Bundle.main.path(forResource: "content", ofType: "plist") 
let dictPlist = NSDictionary(contentsOfFile: plistFile!) 
print(dictPlist ?? "") 

Konnte die JSON-Datei nicht Fetch

if let filepath = Bundle.main.path(forResource: "fruits", ofType: "json") { 
     do { 
      let contents = try String(contentsOfFile: filepath) 
      print(contents) 
     } catch { 
      print("Fetched") 
     } 
    } else { 
     print("not found") 
    } 
+1

Kontrolle dieses https://stackoverflow.com/questions/45882205/load-json-from-file-with-swift-3/45882685 # 45882685 –

+1

Mögliches Duplikat von [Load json aus Datei mit swift 3] (https://stackoverflow.com/questions/45882205/load- json-from-file-with-swift-3) –

+0

Laden Sie 'Data' nicht' String' (und verwenden Sie die URL-bezogene API von 'Bundle'). Sie benötigen für die Deserialisierung sowieso "Data". – vadian

Antwort

0

Swift 4 Lösung

Wenn der Dateipfad richtig gefunden wurde, Es könnte ein Problem mit der Dateicodierung geben Ing. Sie sollten explizit die tatsächliche Codierung der JSON-Datei angeben.

die Codierung der Datei zu überprüfen, öffnen Sie die Datei in XCode und einen Blick auf Datei-Inspektor auf der rechten Seite bar haben:

Encoding of the file

if let filePath = Bundle.main.path(forResource: "data", ofType: "json"), 
    let data = NSData(contentsOfFile: filePath) { 
    do { 

    // here you have your json parsed as string: 
    let jsonString = try? String(contentsOfFile: filePath, encoding: String.Encoding.utf8) 

    // but it is better to use the type data instead: 
    let jsonData = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions.allowFragments) 
    } 
    catch { 
    //Handle error 
    } 
}