2014-04-15 76 views
0

我試圖解析此JSON:JSON解析爲一個對象

{ 
    "GetMachineGroupsResult": { 
     "MachineGroups": [ 
      { 
       "GroupCount": 1, 
       "GroupID": 101, 
       "GroupName": "Machine11" 
      }, 
      { 
       "GroupCount": 6, 
       "GroupID": 201, 
       "GroupName": "Machine12" 
      }, 
      { 
       "GroupCount": 1, 
       "GroupID": 301, 
       "GroupName": "Machine13" 
      }, 
      { 
       "GroupCount": 1, 
       "GroupID": 501, 
       "GroupName": "Machine14" 
      }, 
      { 
       "GroupCount": 7, 
       "GroupID": 701, 
       "GroupName": "Machine15" 
      }, 
      { 
       "GroupCount": 1, 
       "GroupID": 901, 
       "GroupName": "Machine16" 
      }, 
      { 
       "GroupCount": 1, 
       "GroupID": 1001, 
       "GroupName": "Machine17" 
      } 
     ], 
     "Status": 0 
    } 
} 

向具備的屬性GroupCount,組ID和組名創建的對象。

這裏是我的代碼:

if (request.responseStatusCode >= 200 && request.responseStatusCode < 300) 
{ 
    NSData *responseData = [request responseData]; 
    NSError* error; 
    NSDictionary* jsonOverview = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 
    NSString *resultStatusString = jsonOverview[@"GetMachineOverviewResult"][@"Status"]; 
    int resultStatus = [resultStatusString intValue]; 
    NSDictionary *parsedObject = jsonOverview[@"GetMachineGroupsResult"]; 

    NSMutableArray *groups = [[NSMutableArray alloc] init]; 
    NSArray *results = [parsedObject valueForKey:@"MachineGroups"]; 
    NSLog(@"Count %lu", (unsigned long)results.count); //results.count = 7 

    for (NSDictionary *parseDic in results) { 
     MachineGroupList *machinegrouplist = [[MachineGroupList alloc] init]; 
     NSLog(@"%@", [parseDic class]); 
     NSLog(@"%@", parseDic); 
     for (NSString *key in parseDic) { 
      if ([machinegrouplist respondsToSelector:NSSelectorFromString(key)]) { 
       [machinegrouplist setValue:[parseDic valueForKey:key] forKey:key]; 
     } 

     [groups addObject:machinegrouplist]; 
    } 
    } 
    NSLog (@"GroupObjects %lu", (unsigned long)[groups count]); //groups count = 21 

出於某種原因,我無法捉摸,它分析每個項目三次,我結束了21個對象,而不是7.我知道這將是一些簡單的這裏的專家之一,但我是新來的這一切,真的很感謝這裏的幫助,謝謝。

編輯: 非常感謝,這裏是它現在的樣子,它的工作原理.. addobject是在錯誤的部分!

for (NSDictionary *parseDic in results) 
    { 
     MachineGroupList *machinegrouplist = [[MachineGroupList alloc] init]; 
     NSLog(@"%@", [parseDic class]); 
     NSLog(@"%@", parseDic); 
     for (NSString *key in parseDic) 
      { 
      if ([machinegrouplist respondsToSelector:NSSelectorFromString(key)]) 
       { 
        [machinegrouplist setValue:[parseDic valueForKey:key] forKey:key]; 
       } 
       //[groups addObject:machinegrouplist]; 
      } 
     [groups addObject:machinegrouplist]; 
    } 
    NSLog (@"GroupObjects %lu", (unsigned long)[groups count]); //groups count = 7 
+0

將一個有用的'description'方法添加到'MachineGroupList'類中,然後記錄'groups'數組,以便查看所有21個對象。這是否會給你任何有用的想法? – rmaddy

+0

我已經登錄了21個項目,它似乎是每個項目的三倍。每個對象都有三個屬性..我收到了線索,但它不是爲我點擊! – user3524211

+0

我也沒有看到它。您只需在'result'中爲每個值調用'addObject:'一次。您公佈的代碼是否是您的REAL ACTUAL代碼? – rmaddy

回答

1

發生了以下事情。首先,讓我們註釋掉一些代碼的最後行,使它看起來像這樣:

for (NSDictionary *parseDic in results) { 
    //MachineGroupList *machinegrouplist = [[MachineGroupList alloc] init]; 
    NSLog(@"%@", [parseDic class]); 
    //NSLog(@"%@", parseDic); 
    //for (NSString *key in parseDic) { 
    // if ([machinegrouplist respondsToSelector:NSSelectorFromString(key)]) { 
    //  [machinegrouplist setValue:[parseDic valueForKey:key] forKey:key]; 
    // } 

    // [groups addObject:machinegrouplist]; 
    //} 
} 
//NSLog (@"GroupObjects %lu", (unsigned long)[groups count]); //groups count = 21 

你會本身,你遍歷詞典,各自有對象。

現在,註釋掉以前的NSLog,取消註釋內循環,並在該循環內添加一個NSLog,以查看您正在迭代的內容。

for (NSDictionary *parseDic in results) { 
    //MachineGroupList *machinegrouplist = [[MachineGroupList alloc] init]; 
    //NSLog(@"%@", [parseDic class]); 
    //NSLog(@"%@", parseDic); 
     for (NSString *key in parseDic) { 
    // if ([machinegrouplist respondsToSelector:NSSelectorFromString(key)]) { 
    //  [machinegrouplist setValue:[parseDic valueForKey:key] forKey:key]; 
    // } 

    // [groups addObject:machinegrouplist]; 
     NSLog(@"key: %@", key); 
    } 
} 
//NSLog (@"GroupObjects %lu", (unsigned long)[groups count]); //groups count = 21 

你迭代的每個 7個字典的3個對象,並因爲你正在添加的每個對象if ([machinegrouplist respondsToSelector:NSSelectorFromString(key)])之外,你最終將到

乾杯。

+0

謝謝。這是有道理的,我現在已經清理了縮進以使其更清晰。我仍然不確定如何解決這個問題,我應該如何正確地迭代以獲得每個具有正確3個屬性的7個對象?出於某種原因,我無法把頭轉向它! – user3524211

+0

我剛發佈該評論時,它打我!非常感謝! – user3524211