在 iOS 中使用 json 数据更新 plist

Posted

技术标签:

【中文标题】在 iOS 中使用 json 数据更新 plist【英文标题】:Update plist with json data in iOS 【发布时间】:2014-03-24 12:16:35 【问题描述】:

我将 json 内容保存在 plist 文件中。

//Fetch json
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:filePath];

//Get json in dictionary format
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"dict: %@",dict);

//Get plist path
NSString *errorDesc;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory1 = [paths objectAtIndex:0];
NSString *plistPath = [documentsDirectory1 stringByAppendingPathComponent:@"SampleData.plist"];
NSLog(@"plistPath : %@",plistPath);

//Save data from json to plist
NSString *error;
data = [NSPropertyListSerialization dataFromPropertyList:dict
                                                  format:NSPropertyListXMLFormat_v1_0
                                        errorDescription:&error];
if(data) 
    if ([data writeToFile:plistPath atomically:YES]) 
        NSLog(@"Data successfully saved.");
    else 
        NSLog(@"Did not managed to save NSData.");
    

else 
    NSLog(@"%@",errorDesc);

而且它运行良好。

现在假设,有人在 json 中添加了一个新项目。然后如何仅将新项目附加到 plist 中。

PS:在这里,我不想重写整个 plist。我只想检查json是否更新。如果更新了 json,那么我想通过仅附加新项目来更新 plist。

【问题讨论】:

【参考方案1】:

使用类似的东西:

NSMutableDictionary *plistContent = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
[plistContent setObject:value forKey:key];
[plistContent writeToFile:plistPath atomically:YES];

【讨论】:

【参考方案2】:

看来您的 .plist 最初是 JSON 数据的精确副本。是否有其他代码可以修改 .plist?如果没有,你为什么只想写更改?这是非常复杂的代码,容易出错,而且会花费大量时间。将所有 JSON 数据写入 plist 是迄今为止最简单的方法。

如果您有其他代码修改 .plist,那么您还必须跟踪 JSON 数据,否则您无法知道它是否以及如何被修改.祝你好运。

【讨论】:

以上是关于在 iOS 中使用 json 数据更新 plist的主要内容,如果未能解决你的问题,请参考以下文章

无法创建 Plist 文件。 iOS+NSDictionary+JSON

如何在 ios 的 Plist 文件中保存、检索、删除和更新我的数据?

在 iOS 应用程序(plist JSON 或 XML)中如何处理这么多的数据?

在 plist 中更新和保存数据

我该怎么做? (iOS plist 编辑和更新所有控制器)

iOS开发之JSON转PLIST(把存储json格式的文件转换成plist文件)