2013-04-21 87 views
0

我有一組JSON字符串,其中每個JSON字符串都有一個鍵。現在,我想將這些JSON字符串存儲在設備上,以便以後可以使用這些數據。 這裏我沒有在設備上存儲任何對象。 我可以使用CoreData還是有其他選擇嗎? 在設備上存儲JSON的最佳做法是什麼?使用CoreData存儲JSON字符串

+0

如果數據真的沒有與其他對象的關係,你可以嘗試使用的plist。你能展示你的JSON嗎? – Anupdas 2013-04-21 14:40:15

+0

我的JSON會是這樣的,{「status」:「success」,「userid」:「129」,「description」:「some description」}這樣就會有很多JSON字符串需要存儲在設備上。 – satyanarayana 2013-04-21 15:20:25

+0

如果您要創建與用戶的關係,並且此信息最好使用CoreData或Sqlite。否則你可以存儲json文件。我建議將它存儲在plist中,因爲與json相比,它更容易形成字典或數組,因此編輯它們然後再保存它,這需要更多的努力來保存它們。是否有任何其他信息需要存儲。 – Anupdas 2013-04-21 15:31:42

回答

0

JSON只是爲服務器和客戶端(您的應用程序)之間的快速傳輸定義緊湊型數據格式。

你需要做的是將JSON數據從服務器解碼爲數據類型NSDictionary,NSArray,NSString ...然後如果你想存儲它們,使用plist,sqlite或者CoreData來存儲。

對於CoreData,您需要創建與JSON格式關聯的實體。

例:「關鍵」:「值」 - >的NSDictionary

+0

由於我只存儲了一組JSON字符串,在CoreData,sqlite,file和plist中,哪個更適合使用? – satyanarayana 2013-04-21 15:09:43

+0

plist,最簡單 – strong 2013-04-21 22:36:48

1

你也可以簡單的JSON保存到一個文件,當你需要它旁邊再反序列化。

0

如果你沒有太多的數據存儲,你可以使用plist或json。 Plist會更容易,如果你存儲json,你需要多行代碼。

創建一個DataHelper類,其中包含保存,添加,查找全部,findFirtWithValue:forObject:的方法。

下面是一個簡單

#define kPlistFilePath @"Data.plist" 
#define kJsonFilePath @"Data.json" 

@implementation DataController 

+ (NSString *)savedFilePath 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = paths[0]; 
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:kPlistFilePath]; 
    return filePath; 
} 

+ (NSArray *)findAll 
{ 
    NSString *filePath = [self savedFilePath]; 
    return [NSArray arrayWithContentsOfFile:filePath]; 
} 

+ (void)saveJSON:(id)object 
{ 
    NSString *filePath = [self savedFilePath]; 

    NSArray *unsavedArray = nil; 

    if ([object isKindOfClass:[NSString class]]) { 
     NSError *error = nil; 
     unsavedArray = [NSJSONSerialization JSONObjectWithData:[object dataUsingEncoding:NSUTF8StringEncoding] 
                 options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments 
                 error:&error]; 

    }else if([object isKindOfClass:[NSArray class]]){ 
     unsavedArray = object; 

    }else if([object isKindOfClass:[NSDictionary class]]){ 
     unsavedArray = @[object]; 
    } 

    if ([unsavedArray count]) { 
     [unsavedArray writeToFile:filePath atomically:NO]; 
    } 
} 



+ (NSDictionary *)userInfoForID:(NSString *)userID 
{ 
    NSArray *allData = [self findAll]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userid = %@",userID]; 
    return [[allData filteredArrayUsingPredicate:predicate]lastObject]; 
}