从本地读取json文件

今天需要从本地Resource文件夹里读取json文件,发现用如下代码有问题:

  • 代码一
NSString *path = [self pathForLocationsDataFile]; locationDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; // locationDict一直为nil

刚开始一直以为路径下没有对应的json文件,后来跑到.app路径下看,json文件的确存在。
后来改用如下代码,ok了
  • 代码二
NSString *jsonPath = [[NSBundle mainBundle] pathForResource:@"divesite" ofType:@"json"]; NSData *data=[NSData dataWithContentsOfFile:jsonPath]; NSError *error; id jsonObject=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

但是,如果你在代码里面创建一个Dictionary对象,用代码三的方法把它写到本地文件里,在从文件里把它读出来是可以的。
  • 代码三
- (NSString *) pathForDataFile { NSArray*documentDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString*path = nil; if (documentDir) { path = [documentDir objectAtIndex:0]; }return [NSString stringWithFormat:@"%@/%@", path, @"test.bin"]; }- (void) saveDataToDisk:(NSMutableDictionary*)dict { NSString * path = [self pathForDataFile]; if (dict == nil) { return; } [dict writeToFile:path atomically:YES]; }- (NSMutableDictionary*) loadDataFromDisk { NSString* path= [self pathForDataFile]; NSMutableDictionary * rootObject = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; if (rootObject == nil) { rootObject = [[NSMutableDictionary alloc] initWithCapacity:0]; } return rootObject; }

我决定去看看test.bin长啥样?test.bin竟然是xml的格式,难怪使用
NSMutableDictionary * rootObject = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

【从本地读取json文件】的方式不能读取一个json格式的文件!

    推荐阅读