2016-11-21 60 views
1

我將NSDictionary的字符串並將其存儲在SQLite數據庫,再從數據庫中檢索和使用字符串轉換爲NSDictionary中下面的兩種方法{這對下面的代碼中提到}。但是,如果我們將多個字典存儲在一個SQLite數據庫表中,則需要花費大量的時間來轉換這兩種方式{array to string &反之亦然}。有沒有解決方案可以在更短的時間內將完整的NSArray或完整的NSDictionary轉換爲字符串,反之亦然?斯威夫特的NSDictionary JSON數組轉換爲字符串轉換耗時

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,而不是從字符串轉換爲/。 – Moritz

+0

感謝埃裏克!我被迫使用「.stringByReplacingOccurencesOfString ......」因爲我得到「\ n。 。「而從NSDictionary轉換爲字符串。我也不知道你的意思是」數據作爲一個blob而不是轉換爲/從字符串嗎?「 –

+1

你認爲你被迫但你錯了,編碼和解碼正確的方式和你*從來沒有*必須這樣做//我說的是保存你的JSON **數據**而不是保存它的字符串表示形式 – Moritz

回答

0

您不需要將您的JSON數據轉換爲字符串,並且您肯定不應該永遠處理JSON字符串本身。

爲了節省您的字典作爲JSON,只是轉換的字典JSON 數據然後保存數據:

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

這裏jsonData是您的JSON數據。這是您需要保存的內容。沒有其他的。

您可以將其保存爲blob(數據塊)而不是字符串中的SQL表保存此。

然後把它找回來:

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數據轉換爲字符串或從字符串轉換。

最後建議:不要使用NSDictionary的NSArray的和。相反,使用Swift數組和Swift詞典。它更簡單,更安全。

+0

解決方案解決了它eric。多謝:) –

+0

不客氣。 :) – Moritz

相關問題