Последовательная сериализация JSON в быстром режиме

Я использовал следующую строку кода для разбора данных JSON в Objective-C, но то же самое в Swift сбой приложения.

NSDictionary* json = [NSJSONSerialization
                          JSONObjectWithData:_webData
                          options:kNilOptions
                          error:&error];

Я попытался использовать NSJSONReadingOptions.MutableContainers, но, похоже, не работает. Я проверил достоверность данных JSON, полученных с веб-сервера, используя различные проверки достоверности JSON, найденные в Интернете.

[EDIT] Быстрый код, который я использую, выглядит следующим образом:

let jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary

[ОБНОВЛЕНИЕ]

Использование let jsonResult: AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary решает проблему.

Ответ 1

Ошибка Xcode дает вам не очень полезную информацию, но похоже, что вам нужно объявить переменную error другим способом (больше в Apple документация), а затем убедитесь, что вы обрабатываете случай возвращения словаря nil:

var error: AutoreleasingUnsafePointer<NSError?> = nil
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data,
        options:NSJSONReadingOptions.MutableContainers,
        error: error) as? NSDictionary
if jsonResult {
    // process jsonResult
} else {
    // couldn't load JSON, look at error
}

Ответ 3

Нил должен работать, я думаю, что ваша ошибка исходит из другой проблемы, пожалуйста, напишите больше кода/журнала сбоев

    var err: NSError
    var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options:    NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

Вы можете попробовать?

Ответ 4

// Created a NSDictionary to hold the data
var tempLocations : NSArray = NSArray()
var modelLocation : [Location] = [] // Will hold all the locations read in from datafile
// setup the path for the data
let jsonData = NSData(contentsOfURL: fullPathForDataFile)

if let realJsonData = jsonData { // doing a test to check that the data exists
    tempLocations = NSJSONSerialization.JSONObjectWithData(realJsonData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSArray
    println("imported location data file with \(error) errors")
} else {
    // The data file does not exist, tell the user!
}

// For each set of object data in the json file do a loop.
for room in 1..<tempLocations.count {
    var newlocation : Location // This object contains var code:String?
    newlocation.code = tempLocations[room].valueForKey("code") as String
    // save the new location somewhere.
    modelLocation.addObject(newLocation)
}