将JSON数据写入磁盘

5

如何最简单地编写JSON数据/NSDictionary并再次读取它?我知道有NSFileManager,但是是否有开源框架库可以使这个过程更容易?iOS5的NSJSONSerialization类是否支持将数据写入磁盘?

2个回答

16

没错,NSJSONSerialization 是一个好的选择:

NSString *fileName = @"myJsonDict.dat"; // probably somewhere in 'Documents'
NSDictionary *dict = @{ @"key" : @"value" };

NSOutputStream *os = [[NSOutputStream alloc] initToFileAtPath:fileName append:NO];

[os open];
[NSJSONSerialization writeJSONObject:dict toStream:os options:0 error:nil];
[os close];

// reading back in...
NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:fileName];

[is open];
NSDictionary *readDict = [NSJSONSerialization JSONObjectWithStream:is options:0 error:nil];
[is close];

NSLog(@"%@", readDict);

2
很奇怪,我使用了这段完全相同的代码,但应用程序在 [NSJSONSerialization writeJSONObject:dict toStream:os options:0 error:nil]; 这一行处消耗了100%的CPU,然后应用程序就卡在那里了。 - Van Du Tran
2
好的,它缺少获取完整文件路径。 - Van Du Tran
@VanDuTran 我也遇到了完全相同的问题,即使使用完整的文件路径也是如此。有什么想法吗? - elsurudo
@elsurudo,好久不见了,我已经不在那个项目上工作了,我记不清了,抱歉... - Van Du Tran
对于那些感兴趣的人,我最终将JSON序列化为NSData,然后使用NSFileManager将NSData写出,这样就可以正常工作了。 - elsurudo
1
你不能序列化JSON。JSON本身就是被序列化的。你可以将数组或字典序列化为JSON数据。 - gnasher729

1
似乎您必须确保路径中的目录存在,否则在使用+ writeJSONObject:toStream:options:error:时,您的应用程序将挂起并消耗100%的CPU。文件本身将由流创建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接