2016-11-21 5 views
1

Я преобразовываю NSDictionary в строку и сохраняю его в базе данных SQLite и снова извлекаю из базы данных и преобразовывая строку в NSDictionary с использованием следующих двух методов {упомянутых в коде ниже этого параграфа }. Но требуется много времени, чтобы преобразовать оба пути {array в строку & наоборот}, если мы храним несколько словарей в одной таблице базы данных SQLite. Есть ли какое-либо решение для преобразования полного NSArray или полного NSDictionary в строку и наоборот за меньшее время?Swift NSDictionary JSON Array to String Convert Время, затрачиваемое

func jsonDictionary(jsonData:NSDictionary)-> String 
        { 
             
            var error : NSError? 
             
            let jsonData = try! NSJSONSerialization.dataWithJSONObject(jsonData, options: NSJSONWritingOptions.PrettyPrinted) 
             
            let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)! as String 

            return jsonString 
             
        } 
func convertStringToDictionary(text: String) -> NSDictionary { 
        var json=text 
        json = json.stringByReplacingOccurrencesOfString("\n", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 
//        json = json.stringByReplacingOccurrencesOfString(" ", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 
        print(json) 
         
        var jsonDictData=NSDictionary() 
        if let data = json.dataUsingEncoding(NSUTF8StringEncoding) { 
            do { 
                var jsonDict: NSDictionary? = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary 
                jsonDictData=jsonDict?.mutableCopy()as! NSMutableDictionary 
                print(jsonDictData) 
                 
            } 
            catch 
            { 
                 
            } 
        } 
        return jsonDictData 
    } 
+1

'.stringByReplacingOccurrencesOfString (" \ n "...' Зачем вы это делаете? Ну, вы используете '.PrettyPrinted' ... Тогда не используйте его! Передайте пустые опции вместо'. PrettyPrinted'. // Также вы можете сохранить данные JSON как blob вместо преобразования в/из String. – Moritz

+0

Спасибо Эрик! Я вынужден использовать «.stringByReplacingOccurencesOfString ....», потому что я получаю «\ n. . "при преобразовании из NSDictionary в String. Также я не знаю, что вы подразумеваете под« данными как blob вместо преобразования в/из строки? » –

+1

Вы считаете, что вынуждены, но вы ошибаетесь. Кодируйте и расшифровывайте правильный путь и вы никогда не должны этого делать. // И я говорю, чтобы сохранить ваши данные JSON ** вместо сохранения его строкового представления. – Moritz

ответ

0

Вам не нужно, чтобы преобразовать данные в формате JSON в строку, и вы, конечно, никогда не должны обрабатывать саму строку JSON в любом случае.

Чтобы сохранить словарь как JSON, просто конвертировать словарь в JSON данные затем сохраните данные:

let jsonData = try NSJSONSerialization.dataWithJSONObject(yourDictionary, options: []) 
// save `jsonData` in your SQL 

Здесь jsonData ваши данные в формате JSON. Это то, что вам нужно сохранить. Ничего больше.

Вы можете сохранить это в таблице SQL, сохранив его как blob (кусок данных) вместо строки.

Тогда, чтобы получить его обратно:

let jsonData = // get the blob from SQL 
if let json = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: []), 
    let dict = json as? [String: AnyObject] 
{ 
    // here `dict` is your dictionary converted from JSON data 
} 

См? Нет необходимости преобразовывать данные JSON в или из String.

Последнее предложение: не использовать NSDictionary и NSArray. Вместо этого используйте Swift-массивы и словари Swift. Это проще и безопаснее.

+0

Решение разрешило его eric. спасибо многим :) –

+0

Добро пожаловать. :) – Moritz