将多个 json 对象存储到文本文件 iOS

Posted

技术标签:

【中文标题】将多个 json 对象存储到文本文件 iOS【英文标题】:Store multiple json object in to a text file iOS 【发布时间】:2015-08-25 06:10:37 【问题描述】:

当设备上没有互联网连接时,我将 json 存储到一个文本文件中。但问题是,如果我再做一次,它就会被替换。这是我正在做的存储到文本文件中的操作。如何在文本文件中存储多个 json 对象。当我获得连接时,我需要将 json 发布到服务器。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filePath = [docDir stringByAppendingPathComponent:@"File.json"];
[jsonString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];

请指教。

【问题讨论】:

【参考方案1】:

这并不像串联多个 JSON 文件那样直接不会 生成有效的 JSON 文件。要正确执行此操作,您需要读取并解析现有的 JSON 文件,这将为您提供一个 NSArrayNSDictionary ***对象,然后从新的 JSON 文件中附加数据并将整个内容写出来。

这是在处理旧数据时效率低下。

因此,我建议您将新数据写入新文件,使用当前日期/时间作为文件名,并在需要上传时读取每个文件并单独上传,一次一个.然后在上传时删除每个文件。

【讨论】:

【参考方案2】:

使用下面的方法将文本附加到文件中

-(void) writeToLogFile:(NSString*)content
content = [NSString stringWithFormat:@"%@\n",content];

 //get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filePath = [docDir stringByAppendingPathComponent:@"File.json"];

NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:fileName];
if (fileHandle)
    [fileHandle seekToEndOfFile];
    [fileHandle writeData:[content dataUsingEncoding:NSUTF8StringEncoding]];
    [fileHandle closeFile];

else
    [content writeToFile:fileName
              atomically:NO
                encoding:NSStringEncodingConversionAllowLossy
                   error:nil];

【讨论】:

结果是有效的 JSON 吗? 是的,在附加分隔符时维护一些分隔符并使用此分隔符检索 json 数据并发布到您的服务器。

以上是关于将多个 json 对象存储到文本文件 iOS的主要内容,如果未能解决你的问题,请参考以下文章

IOS 偏好设置数据 存 取(Preferences文件夹)

iOS归档使用

Facebook图片存储系统Haystack——存小文件,本质上是将多个小文件合并为一个大文件来降低io次数,meta data里存偏移量

从具有多个对象的文本文件创建对象

如何将WordPress远程附件存储到腾讯云对象存COS上

如何将arrayList打印到文本文件?