2017-09-24 66 views
0

菜鳥。我最近開始與目標C合作,目前我堅持使用字典概念。我想創建JSON對象,如下所示:創建一個字典,字典的數組這裏

{"UserData": { 
       "Name": Mike Smith, 
       "Age": 32, 
       "category": [1,2,3], 
       "Weekly Data": [ 
           {"Monday" : [1.0,2.0,3.0]}, 
           {"Tuesday": [1.0,2.0,3.0]} 
          ] 
       } 
} 

我寫了下面的代碼段,其不給所期望的結果。我想知道有人能幫助我。

-(NSString*)populateUserPreferences 
{ 
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
    NSMutableArray *categorydata = [[NSMutableArray alloc] init]; 
    NSMutableArray *weeklydata = [[NSMutableArray alloc] init]; 

    for (int i=0;i<4; i++) 
    { 
     [categorydata addObject:[NSNumber numberWithInt:i]]; 
    } 


     NSMutableArray *mondaydata = [[NSMutableArray alloc] init]; 
     for (int j=0; j<3; j++) 
     { 
      [mondaydata addObject:[NSNumber numberWithInt:j]]; 
     } 

     NSMutableArray *tuesdaydata = [[NSMutableArray alloc] init]; 
     for (int j=0; j<3; j++) 
     { 
      [tuesdaydata addObject:[NSNumber numberWithInt:j]]; 
     } 


     NSDictionary *monday = [NSDictionary dictionaryWithObject:mondaydata]; 
     NSDictionary *tuesday = [NSDictionary dictionaryWithObject:tuesdaydata]; 

     [weeklydata addObject: monday ]; 
     [weeklydata addObject: tuesday ]; 

    } 

    [dict setObject:[NSString stringWithFormat:"Mike Smith"] forKey:@"Name"]; 
    [dict setObject:[NSNumber numberWithInteger:32.0] forKey:@"Age"]; 

    [dict setObject:categorydata forKey:@"category"]; 
    [dict setObject:weeklydata forKey:@"Weekly Data"]; 

    NSString * userdata = [dict JSONRepresentation]; 
    NSLog(request); 

    NSDictionary *userdataJson = [NSDictionary dictionaryWithObject:dict forKey:@"userData"]; 

    return [userdataJson JSONRepresentation]; 
} 

預先感謝您的關注。

Apoorva

+0

*是什麼*預期的結果?你得到的結果是什麼? –

回答

0

的錯誤是在創建週一和週二字典時。

// mondaydata & tuesday is just array. 
NSDictionary *monday = [NSDictionary dictionaryWithObject:mondaydata]; 
NSDictionary *tuesday = [NSDictionary dictionaryWithObject:tuesdaydata]; 

由於您沒有正確指定字典(字典的關鍵字在哪裏?),所以此代碼是錯誤的。相反,你應該做的:

NSDictionary *mondayDict = [[NSDictionary alloc] init]; 
[mondayDict setObject:mondaydata forKey:"Monday"]; 
NSDictionary *tuesdayDict = [[NSDictionary alloc] init]; 
[tuesdayDict setObject:tuesdaydata forKey:"Tuesday"]; 

然後你就可以添加mondayDict和tuesdayDict你的陣列weeklydata。

ps。只是一個筆記,爲您的變量有意義地命名。例如,mondaydata不夠描述。例如,您應該使用mondayArr。爲了容易識別它是一個數組。只是一個正常的編碼習慣來分享。

0
NSDictionary * dict = @{@"UserData": @{ 
           @"Name": @"Mike Smith", 
           @"Age": @32, 
           @"category": @[@1,@2,@3], 
           @"Weekly Data": @[ 
             @{@"Monday" : @[@1.0,@2.0,@3.0]}, 
             @{@"Tuesday": @[@1.0,@2.0,@3.0]} 
             ] 
           } 
         }; 
NSError * error = nil; 
NSData * data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; 
if (error) { 
    NSLog(@"%@", [error localizedDescription]); 
} else { 
    // Do what you want 
}