如何将 JSON 数据保存到 iPhone

How to save JSON data to iPhone

我有一个 json 数据来显示一些信息.. 但我应该生成 "a file" 以将这些信息保存到我的 iPhone。想法?

- (void)showInfos {
NSMutableDictionary *infoDictionary = [[NSMutableDictionary alloc]init];
[infoDictionary setObject:self.totalDuration.text forKey:@"totalFrames"];

NSMutableArray *nodesArray = [[NSMutableArray alloc]init];
[nodesArray addObject:@{@"x":@(_zeroButton.frame.origin.x),@"y":@(_zeroButton.frame.origin.y),@"frame":self.zeroBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_firstButton.frame.origin.x),@"y":@(_firstButton.frame.origin.y),@"frame":self.firstBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_secondButton.frame.origin.x),@"y":@(_secondButton.frame.origin.y),@"frame":self.secondBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_thirdButton.frame.origin.x),@"y":@(_thirdButton.frame.origin.y),@"frame":self.thirdBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_fourthButton.frame.origin.x),@"y":@(_fourthButton.frame.origin.y),@"frame":self.fourthBtnLbl.text}];
[infoDictionary setObject:nodesArray forKey:@"nodes"];

NSLog(@"dicArray:%@",infoDictionary);
NSData *data = [NSJSONSerialization dataWithJSONObject:infoDictionary options:kNilOptions error:nil];
NSArray *retDicArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"retDicArray:%@",retDicArray);
}

您可以使用 NSDatawriteToFile:atomically: 方法将该数据写入文件。

NSData *data       = [NSJSONSerialization dataWithJSONObject:infoDictionary options:kNilOptions error:nil];
NSString *docDir   = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *filePath = [docDir stringByAppendingPathComponent:@"MyJSONFile.json"];
[data writeToFile:filePath atomically:YES];

您真的需要将其保存到文件中还是只想将信息序列化到应用程序中?

我个人经常使用 NSUserDefaults 在应用程序中保存简单的用户信息。

例如,如果你想存储一个整数:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:newDistance forKey:@"myInteger"];
[defaults synchronize];

然后当你想要检索它时,只需执行以下操作:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int myInteger = (int)[defaults integerForKey:@"myInteger"];

你也可以存储 NSArray,所以它应该适合你。

如果你有更复杂的结构要序列化,你可以使用 Core Data,但它要复杂得多。