Ios 将JSON字符串解析为三个数组Objective C
我试图使用从objective c中的文本文件中读取的数据。我从文本文件中读取的数据是:Ios 将JSON字符串解析为三个数组Objective C,ios,objective-c,json,Ios,Objective C,Json,我试图使用从objective c中的文本文件中读取的数据。我从文本文件中读取的数据是: {"aps":{"alert":"Test 1!","sound":"beep.wav","badge":5,"Type":"Banking"},"acme1":"bar","acme2":42}|{"aps":{"alert":"Test 2!","sound":"beep.wav","badge":5,"Type":"Banking"},"acme1":"bar","acme2":42}|{"aps":
{"aps":{"alert":"Test 1!","sound":"beep.wav","badge":5,"Type":"Banking"},"acme1":"bar","acme2":42}|{"aps":{"alert":"Test 2!","sound":"beep.wav","badge":5,"Type":"Banking"},"acme1":"bar","acme2":42}|{"aps":{"alert":"Test 3!","sound":"beep.wav","badge":5,"Type":"Banking"},"acme1":"bar","acme2":42}|{"aps":{"alert":"Test 4!","sound":"beep.wav","badge":5,"Type":"Banking"},"acme1":"bar","acme2":42}|{"aps":{"alert":"Test 5!","sound":"beep.wav","badge":5,"Type":"Banking"},"acme1":"bar","acme2":42}
读取后,我将文件拆分为一个分隔符为“|”的数组。然后,我想进一步将其分为3个不同的数组:基于关键“类型”的银行、欺诈和投资。但是,一旦我将JSON字符串拆分到数组中,我似乎无法解析它。我的视图加载方法如下:
- (void)viewDidLoad {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"%@/AccountNotifications.txt", documentsDirectory];
NSString *fileContents = [[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil];
NSArray *fileData = [fileContents componentsSeparatedByString:@"|"];
if (fileContents != NULL)
{
bankingNotifications = [[NSMutableArray alloc] init];
fraudNotifications = [[NSMutableArray alloc] init];
investmentNotifications = [[NSMutableArray alloc] init];
for (i = 0; i < [fileData count]; i++)
{
NSString *notification = fileData[i];
NSDictionary *json = [notification JSONValue];
NSArray *items = [json valueForKeyPath:@"aps"];
if ([[[items objectAtIndex:i] objectForKey:@"Type"] isEqual: @"Banking"])
{
[bankingNotifications addObject:fileData[i]];
NSLog(@"Added object to banking array");
}
if ([[[items objectAtIndex:i] objectForKey:@"Type"] isEqual: @"Fraud"])
{
[fraudNotifications addObject:fileData[i]];
NSLog(@"Added object to fraud array");
}
if ([[[items objectAtIndex:i] objectForKey:@"Type"] isEqual: @"Investment"])
{
[investmentNotifications addObject:fileData[i]];
NSLog(@"Added object to investment array");
}
} }
你能帮我把JSON字符串解析成三个可变数组吗?我得到的错误是:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSDictionaryM objectAtIndex:]:无法识别的选择器发送到实例0x1d59db30'
键“aps”的值是一个字典
NSDictionary *item = [json valueForKeyPath:@"aps"];
if ([[item objectForKey:@"Type"] isEqualToString: @"Banking"])
{
[bankingNotifications addObject:notification];
NSLog(@"Added object to banking array");
}
else if ([[item objectForKey:@"Type"] isEqualToString: @"Fraud"])
{
[fraudNotifications addObject:notification];
NSLog(@"Added object to fraud array");
}
else if ([[item objectForKey:@"Type"] isEqualToString: @"Investment"])
{
[investmentNotifications addObject:notification];
NSLog(@"Added object to investment array");
}
键“aps”的值是一个字典
NSDictionary *item = [json valueForKeyPath:@"aps"];
if ([[item objectForKey:@"Type"] isEqualToString: @"Banking"])
{
[bankingNotifications addObject:notification];
NSLog(@"Added object to banking array");
}
else if ([[item objectForKey:@"Type"] isEqualToString: @"Fraud"])
{
[fraudNotifications addObject:notification];
NSLog(@"Added object to fraud array");
}
else if ([[item objectForKey:@"Type"] isEqualToString: @"Investment"])
{
[investmentNotifications addObject:notification];
NSLog(@"Added object to investment array");
}
如果您自己创建文本文件,我建议您创建一个有效的json对象(因为您的数据看起来应该是json),以保持数据整洁。与此类似:
{"aps":[{"type":"Banking","badge":5},{"Type":"Fraud","badge":12}]}
然后,您可以执行以下操作(此代码未经测试,可能需要对其进行一些修改),但我希望您会有一个想法:)
如果您自己创建文本文件,我建议您创建一个有效的json对象(因为您的数据看起来应该是json),以保持数据整洁。与此类似:
{"aps":[{"type":"Banking","badge":5},{"Type":"Fraud","badge":12}]}
然后,您可以执行以下操作(此代码未经测试,可能需要对其进行一些修改),但我希望您会有一个想法:)
您发布的错误表示您正试图在NSDictionary上使用objectAtIndex,一种NSArray方法。它轰炸了哪一行?
”-[\uu nsdictionary-objectAtIndex:]:发送到实例的无法识别的选择器表示您试图将字典视为数组。(仔细阅读消息,您会发现。)您得到的分隔字符串表示JSON“对象”(字典),而不是数组(中的下一层也是“对象”),因此这可能是您的问题。(与仅仅将字符串放入一个封装的JSON数组相比,Y是这样分开的字符串吗?)这就是您开始出错的地方:NSArray*items=[JSON valueForKeyPath:@“aps”]代码>。该操作的结果是NSDictionary,而不是NSArray。您不应该在文件中放入3个数组,而不是使用“|”吗?这将使它成为一个符合标准的JSON文件。您发布的错误表明您正试图在NSDictionary上使用objectAtIndex,一种NSArray方法。它轰炸了哪一行?”-[\uu nsdictionary-objectAtIndex:]:发送到实例的无法识别的选择器表示您试图将字典视为数组。(仔细阅读消息,您会发现。)您得到的分隔字符串表示JSON“对象”(字典),而不是数组(中的下一层也是“对象”),因此这可能是您的问题。(与仅仅将字符串放入一个封装的JSON数组相比,Y是这样分开的字符串吗?)这就是您开始出错的地方:NSArray*items=[JSON valueForKeyPath:@“aps”]代码>。该操作的结果是NSDictionary,而不是NSArray。您不应该在文件中放入3个数组,而不是使用“|”吗?这将使它成为一个一致的JSON文件。