2015-02-28 4 views
7

Я добавил JSON-файл в моей файловой системе, где данные структурированы так:Как извлечь данные из файла с SwiftyJSON

{ «DDD»: «3D Systems Corporation», «МММ »:« 3M Company »,« WBAI »: « 500.com Limited »,« WUBA »:« 58.com Inc. »,« AHC »:« AH Belo Corporation »,« ATEN »:« Сети A10, Inc. »,« AAC »:« AAC Holdings, Inc. »,« AIR »:« AAR Corp. », }

имя-файла Мое stockDict.json и я пытаюсь извлечь из него данные, используя этот код:

let jsonFilePath:NSString = NSBundle.mainBundle().pathForResource("stockDict", ofType: "json")! 
     let jsonData:NSData = NSData.dataWithContentsOfMappedFile(jsonFilePath as String) as! NSData 
     let error:NSError? 
     let json = JSON(jsonData) 

     println(json[0][0].string) 

Но все это я получаю, когда он печатает это nil. Что не так с моим кодом?

Любые предложения будут оценены.

+0

Я нашел этот ответ будет очень полезно http://stackoverflow.com/a/28644494/535339 – crobicha

ответ

10

ли вы попробовать с

let json = JSON(data: jsonData) // Note: data: parameter name 
println(json["DDD"].string) 
+0

Теперь у меня есть, и она до сих пор печатает "ноль" , – joseph

+0

А, вам не хватает данных: имя параметра, отредактировал ответ –

+0

Спасибо большое! :) – joseph

5

У меня нет респ комментировать, но этот ответ устаревшим прошивкой 8, в частности следующую часть.

.dataWithContentsOfMappedFile 

XCode сообщает мне.

'dataWithContentsOfMappedFile' was deprecated in iOS 8.0: Use +dataWithContentsOfURL:options:error: and NSDataReadingMappedIfSafe or NSDataReadingMappedAlways instead. 

------ EDIT --------

Вот обновленный код, я использую. Он компилируется и запускается с целью iOS 9.1.

let path = NSBundle.mainBundle().pathForResource("fileName", ofType: "json") 
let jsonData = NSData(contentsOfFile:path!) 
let json = JSON(data: jsonData!) 
1

Swift 3 версия:

let path = Bundle.main.path(forResource: "JSON", ofType: "json")! 
let jsonString = try? String(contentsOfFile: path, encoding: String.Encoding.utf8) 
let json = JSON(parseJSON: jsonString!) 
+0

В настоящее время рекомендуется использовать Bundle.main.url вместо Bundle.main.path. – Moritz

+0

Спасибо @Moritz! –