在iOS元素中存储可变大小的JSON数组

在iOS元素中存储可变大小的JSON数组,ios,objective-c,json,Ios,Objective C,Json,我收到一个来自API的JSON回复,它返回上述内容。现有的iOS代码使用AFNetworking解析JSON。我能够将bidstatus存储为NSArray,将config存储为NSDictionary。但是,我无法正确存储lvlsubj。此对象看起来像一个具有可变大小的第二级数组的二维数组 我该怎么做呢 现有的代码非常简单 { "bidstatus":[ {"bidstatusid":"1","bidstatus":"Quoted"}, {"bidstatu

我收到一个来自API的JSON回复,它返回上述内容。现有的iOS代码使用AFNetworking解析JSON。我能够将bidstatus存储为NSArray,将config存储为NSDictionary。但是,我无法正确存储lvlsubj。此对象看起来像一个具有可变大小的第二级数组的二维数组

我该怎么做呢

现有的代码非常简单

{
  "bidstatus":[
        {"bidstatusid":"1","bidstatus":"Quoted"},
        {"bidstatusid":"2","bidstatus":"Closed"},
        {"bidstatusid":"3","bidstatus":"Awarded"}
        ],
  "config":{
        "adminfee":"100",
        "percentcommission":"10",
        "premiumfee":"0"
        },
  "lvlsubj":{
        "Primary 1":["English","Geography","Maths","Science"],
        "Primary 2":["English","Geography","History"],
        "Primary 3":["Maths","Science"]
        }
}

多亏了上面的建议,我设法将它们存储起来并阅读

将其存储为NSDictionary

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSString* strRequestLink = [NSString stringWithFormat:@"%@%@", SERVICEPATH, @"get_var.php"];
[manager GET: strRequestLink
  parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"JSON: %@", responseObject);
         [GlobalPool sharedObject].m_dictPaymentConfig = [[responseObject valueForKey:@"config"] mutableCopy];
         [GlobalPool sharedObject].m_arrayBidStatus = [[responseObject valueForKey:@"bidstatus"] mutableCopy];
         //[GlobalPool sharedObject].m_arrayLevelSubject = [[responseObject valueForKey:@"lvlsubj"] mutableCopy];

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);

         [self showServerConnectionError];
     }];
然后使用allKeys在NSArray中存储密钥。使用这些键,从NSDictionary读取(它将返回数组)

这里的代码用键填充选择器。选择一个值后,它将从NSDictionary读取相应的对象(NSArray)并填充第二个选择器

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSString* strRequestLink = [NSString stringWithFormat:@"%@%@", SERVICEPATH, @"get_var.php"];
[manager GET: strRequestLink
  parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"JSON: %@", responseObject);
         [GlobalPool sharedObject].m_dictPaymentConfig = [[responseObject valueForKey:@"config"] mutableCopy];
         [GlobalPool sharedObject].m_arrayBidStatus = [[responseObject valueForKey:@"bidstatus"] mutableCopy];
         [GlobalPool sharedObject].m_dictLevelSubject = [[responseObject valueForKey:@"lvlsubj"] mutableCopy];

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);

         [self showServerConnectionError];
     }];
-(iAction)操作选择器级别:(id)发送方{
NSArray*arrayKeys=[[GlobalPool sharedObject].m_dictLevelSubject allKeys];
if(arrayKeys.count==0)
返回;
[arrayPickerItems removeAllObjects];
for(int-nIdx=0;nIdx0?SelectedLevelIDX:0目标:自成功操作:@selector(itemWasSelected:element:)取消操作:@selector(actionPickerCancelled:)源:发件人];
}
-(iAction)actionChooseSubject:(id)发件人{
NSArray*arrayObject=[[GlobalPool sharedObject].m_dictLevelSubject objectForKey:self.m_lblSelectedLevel.text];
if(arrayObject.count==0)
返回;
[arrayPickerItems removeAllObjects];
for(int nIdx=0;nIdx0?SelectedSubjectIdx:0目标:自成功操作:@selector(itemWasSelected:element:)取消操作:@selector(actionPickerCancelled:)来源:发件人];
}

lvlsubj是一个字典,主1作为第一个键,它是一个数组。从lvlsubj检索后,与您对bid status所做的操作相同,对primary 1等进行操作。看起来
lvlsubj
nsarray
NSDictionary
。因此,调用
[lvlsubj objectForKey”“]
将返回一个数组。很抱歉,在我的手机上,或将评论作为答案,但无法正确测试。谢谢双方,我将尝试。
- (IBAction)actionChooseLevel:(id)sender {
    NSArray* arrayKeys = [[GlobalPool sharedObject].m_dictLevelSubject allKeys];
    if (arrayKeys.count == 0)
        return;

    [arrayPickerItems removeAllObjects];
    for (int nIdx = 0; nIdx < arrayKeys.count; nIdx++)
    {
        NSMutableString* strInfo = [arrayKeys objectAtIndex:nIdx];
        [arrayPickerItems addObject:strInfo];
    }

    [ActionSheetStringPicker showPickerWithTitle:@"Choose Level" rows:arrayPickerItems initialSelection:nSelectedLevelIdx > 0 ? nSelectedLevelIdx : 0 target:self successAction:@selector(itemWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender];
}

- (IBAction)actionChooseSubject:(id)sender {
    NSArray* arrayObject = [[GlobalPool sharedObject].m_dictLevelSubject objectForKey:self.m_lblSelectedLevel.text];
    if (arrayObject.count == 0)
        return;

    [arrayPickerItems removeAllObjects];
    for (int nIdx = 0; nIdx < arrayObject.count; nIdx++)
    {
        NSMutableString* strInfo = [arrayObject objectAtIndex:nIdx];
        [arrayPickerItems addObject:strInfo];
    }

    [ActionSheetStringPicker showPickerWithTitle:@"Choose Subject" rows:arrayPickerItems initialSelection:nSelectedSubjectIdx > 0 ? nSelectedSubjectIdx : 0 target:self successAction:@selector(itemWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender];
}