Ios 将JSON字符串解析为三个数组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":

我试图使用从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":{"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文件。