2013-05-22 3 views
0

Я использую Objective C и вот моя проблема ..Получить значения от объекта json в Objective C?

{ 
    "STATUS":"OK", 
    "projects": 
    [ 

    { 

     "company": 
     { 
      "name":"ABC Pvt Ltd.","id":"12345" 
     }, 
     "created-on":"2012-07-07T04:29:29Z", 
     "category": 
     { 
      "name":"", 
      "id":"" 
     }, 
     "starred":false, 
     "name":"MY Platform 1", 
     "startDate":"", 
     "logo":"abc.png","notifyeveryone":false, 
     "id":"70596", 
     "last-changed-on":"2013-05-20T12:22:11Z", 
     "status":"active", 
     "endDate":"" 

    }, 

    { 
     "company":{ 
        "name":"ABC Pvt Ltd.", 
        "id":"31222" 
        }, 
     "created-on":"2012-05-22T07:06:30Z", 
     "category":{ 
        "name":"","id":"" 
        }, 
     "starred":false, 
     "name":"Miscellaneous 1", 
     "startDate":"", 
     "logo":"abc.png", 
     "notifyeveryone":false, 
     "id":"12345", 
     "last-changed-on":"2013-05-20T12:19:45Z", 
     "status":"active", 
     "endDate":"" 
    } 
    ] 
    } 

Выше моя JSON строки я извлечение из asihttpRequest

теперь я хочу, чтобы отобразить название проекта eg.MY платформы 1 и 1 Разное

я только что получил множество проектов со следующим:

NSDictionary* json = [NSJSONSerialization 
          JSONObjectWithData:data //1 

          options:kNilOptions 
          error:&error]; 



    ProjectDetailsarray = [json objectForKey:"projects"]; 

теперь может кто-нибудь, дайте мне знать, как И.Г. et имя проектов, как я упоминал выше, в моем представлении таблицы с двумя строками.

первый МОЯ Платформа 1 и второй является Разное 1

Я новичок в Objective C, так что я пытался решить, но из ddint найти способ, чтобы получить имя проекта?

+1

Все имеющийся ответ здесь не является универсальным и ошибкам. Проверьте правильность метода [здесь] (http://stackoverflow.com/questions/14958883/ios-serialize-deserialize-complex-json-generically-from-nsobject-class/16771574#16771574) –

+0

Спасибо ... я проверю это –

ответ

4

Простой цикл по массиву:

for (NSDictionary *project in json[@"projects"]) { 
    NSLog(@"Project name: %@", project[@"name"]); 
} 

Примечание Я использую индексируются обозначения вместо [json objectForKey:@"projects"], что намного короче.

0

У вас есть массив проектов в json. и этот массив содержит словари.

Итак, сначала вам нужно получить словарь из массива, а затем вы можете получить значение из словаря.

Как это ..

NSArray *projects = [json objectForKey:@"projects"]; 
for(NSDictionary *dict in projects) 
    NSLog(@"Project Name: %@",[dict objectForKey:@"name"]); 
+0

Почему смесь -объекта ForKey и -valueForKey :? Обычно вам нужен -объектForKey: –

2

У вас есть массив словарей. Как получить значения из словаря вы должны знать:

NSDictionary *dic = @{@"Name": @"Andrew", 
         @"Surname": @"Kama", 
         @"Age": @24, 
         @"Friends":@[@"Lesly", @"John", @"Carter"]}; 

NSString *name = dic[@"Name"]; 

Чтобы получить имя второго друга:

NSArray *friends = dic[@"Friends"]; 
NSString *secondFriend = friends[1]; // or dic[@"Friends"][1]; 

и так далее.

Вы можете думать о JSON как о вложенных NSDictionaries/NSArrays.

перебрать проектов:

NSArray *projects = json[@"projects"]; 
for (NSDictionary *project in projects) { 
    NSLog(@"Project name: %@", project[@"name"]); 

    // how to get company name? 
    // project[@"company"][@"name"]; 
    // etc 
} 
0

Это просто.Просто получить значение, как это от вас массива:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    } 

    cell.textLabel.text = [[ProjectDetailsarray objectAtIndex:indexPath.row] objectForKey:@"name"]; 
} 
+0

'objectForKey', а не' valueForKey'. Но вы действительно должны использовать подстрочную нотацию. – Cyrille

1

как проект представляет собой массив можно перечислить массив и получать аутов имя проекта ее ключом, как показано ниже

__block NSMutableArray *projectNameArray=[[NSMutableArray alloc] init]; 
NSArray *projects = [json objectForKey:@"projects"]; 

[projects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSLog(@"project %i %@",idx,[obj valueForKey:@"name"]); 
    [projectNameArray addObject:[obj valueForKey:@"name"]]; 
}]; 

NSLog(@"project name array is %@",projectNameArray); 
1

Вы можете использовать Key-Value Coding, чтобы получить массив проектов имен с этим кодом:

NSArray *projectsNames = [json valueForKeyPath:@"projects.name"]; 

Этот пример кода:

NSArray *projectsNames = [json valueForKeyPath:@"projects.name"]; 
NSLog(@"Projects names: %@", projectsNames); 

дает этот вывод:

Projects names: (
    "MY Platform 1", 
    "Miscellaneous 1" 
) 

Вы можете получить более подробную информацию о Coding Key-Value в документации здесь: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html

Смежные вопросы