2016-03-03 3 views
15

в моем проекте iOS Мне нужно сохранить весь JSON в качестве пользовательских данных, а затем перезагрузить его при следующем запуске приложения. Сокрушая его во множество значений, а затем воссоздавая JSON, это не вариант, мне просто нужен некоторый сериализуемый способ сэкономить весь необработанный JSON. Я попытался преобразовать его в String, выполнив json.rawString() и заново создав его, передав полученный string в JSON(string), но он не работает.Как сохранить и загрузить JSON в NSUserDefaults с помощью SwiftyJSON?

Я так поражен сложностью создания такой простой вещи, и отсутствие информаций о вещах, как этот онлайн, так что я не могу ждать, чтобы узнать, как сделать это :)

Примера:

public func saveJSON(j: JSON) { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setValue(j.rawString()!, forKey: "json") 
    // here I save my JSON as a string 
} 

public func loadJSON() -> JSON { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    return JSON(defaults.valueForKey("json") as! String)) 
    // here the returned value doesn't contain a valid JSON 
} 
+0

Вы уверены, что вы хотите сохранить его в NSUserDefaults? Возможно, было бы лучше де-сериализовать ваш JSON в массив или словарь, а затем сохранить его в plist в каталоге документов и загрузить его при запуске приложения. – Abizern

+0

Проблема в том, что данные могут измениться, и в любом случае это очень маленький JSON, поэтому для меня все в порядке. –

+0

Сделал ли saveJSON для вас? –

ответ

19

Спасибо за ваши ответы, но они не решить мою проблему. Я, наконец, нашел решение, которое было действительно простым в фактах:

public func loadJSON() -> JSON { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    return JSON.parse(defaults.valueForKey("json") as! String)) 
    // JSON from string must be initialized using .parse() 
} 

Действительно простой, но не документированный.

2

Я использовал следующий код, и он работает как шарм!

NSString *json = @"{\"person\":{\"first_name\":\"Jim\", \"last_name\":\"Bell\"}} "; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if([defaults objectForKey:@"json"]== nil){ 
    [defaults setObject:json forKey:@"json"]; 
    //[defaults synchronize]; 
} 
else{ 
    NSLog(@"JSON %@", [defaults objectForKey:@"json"]); 
} 

Первая попытка посмотреть, можно ли сохранить жестко закодированных строк в NSUserDefaults первой.

Также попробуйте позвонить [defaults synchronize];, когда вы хотите сохранить данные. Хотя это NOT обязательно, это может потребоваться в экстремальных условиях, например, если приложение вот-вот закончится.

1

Вот быстр пример, который работает

import SwiftyJSON 
class Users{ 

    init(){ 
     let yourJSON = {"name":"Deeznuts"} 
     let response = JSON(yourJSON) 

     // Store your 
     let httpMessage = response["name"].stringValue 

    } 
} 
-1

скор 3

func setObject(value:JSON ,key:String){ 
     let pref = UserDefaults.standard 
     pref.set(value.rawString(), forKey: key) 
     pref.synchronize() 
} 

func getObject(key:String) -> JSON{ 
    let pref = UserDefaults.standard 
    let string = pref.value(forKey: key) as! String 
    let dataFromString = string.data(using: String.Encoding.utf8, allowLossyConversion: false) 
    return JSON(data: dataFromString!) 
} 
Смежные вопросы