2013-05-20 3 views
0

Как можно получить этот json. В нем есть динамические значения. Ниже приводится json.Как получить этот json

{ 
Level1: 
    { 
    row1: 
    { 
    1: "on", 
    2: "on", 
    3: "on", 
    4: "on", 
    5: "on", 
    6: "on", 
    7: "on", 
    8: "on", 
    9: "on", 
    10: "on", 
    attr: { 
    total: "10", 
    type: "gold" 
    } 
    }, 
    row2: { 
    1: "on", 
    2: "on", 
    3: "on", 
    4: "on", 
    5: "on", 
    6: "on", 
    7: "on", 
    8: "on", 
    9: "on", 
    10: "on", 
    attr: { 
    total: "10", 
    type: "gold" 
    } 
    } 
    }, 
    Level3: { 
row1: { 
1: "on", 
2: "on", 
3: "on", 
4: "on", 
5: "on", 
6: "on", 
7: "on", 
8: "on", 
    9: "on", 
10: "on", 
attr: { 
total: "10", 
type: "silver" 
} 
} 
} 
} 

В ряде уровней, количество строк динамично и внутри него место, также динамично, как решать это я не получаю его. Пожалуйста, руководство для выше, я уже провел день на нем. Ниже мой код, что я еще пытался.

arrLevels = [self.mGetDataDict allKeys];   // getting all levels here in array 
    NSLog(@"keys:%@", arrLevels); 

    for(int i=0; i<[arrLevels count]; i++)  // trying to get rows in array 
{ 
    receiveDataDict = [self.mGetDataDict valueForKey:[arrLevels objectAtIndex:i]]; 
    [arrRows addObject:[NSString stringWithFormat:@"%d", [receiveDataDict count]]]; 
    NSLog(@"data:%@", receiveDataDict); 
    for(int j=0; j<[receiveDataDict count]; j++) 
    { 
     NSLog(@"count:%d", [receiveDataDict count]); 
     dictRow = [receiveDataDict valueForKey:@"attr"]; 
     [arrTot addObject:[dictRow valueForKey:@"total"]]; 
     [arrType addObject:[dictRow valueForKey:@"type"]]; 
    } 
} 

ответ

2

Шаг 1: Скачать в формате JSON Framework для IOS от here, и добавить библиотеки файлов его в проект

Шаг 2: импорт #import "JSON.h" в файле .h

Шаг 3: Получите ваши JSon данные с сервера или Местный.

NSData *data = ...Your JSON Data...; 
NSString *responseString = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding]; 

// Parse it Using SBJSON 
NSDictionary *dictResults = [NSDictionary dictionaryWithDictionary:[responseString JSONValue]]; 

// Read all Levels 
for(NSString *key in [dictResults allKeys]) 
{ 
    NSLog(@"Accessing .... %@",key); 
    for(NSString *rowKey in dictResults[key]) 
    { 
     NSLog(@"%@",rowKey); 
     for(NSString *valueKey in dictResults[key][rowKey]) 
     { 
      NSLog(@"%@ -> %@",valueKey,dictResults[key][rowKey][valueKey]); 
     } 
     NSLog(@"--------ROW OVER------------\n");    
    } 
    NSLog(@"--------------------\n"); 
} 
+0

Я хочу спросить, почему он извлекает данные из нижней части, сначала показывает уровень 3 последней строки, затем уровень 2 и далее. –

+0

Заказ данных здесь не сохраняется, он будет получать доступ к данным произвольным доступом, а не последовательным образом. Вот почему. –

+0

Можем ли мы справиться с этим, есть ли способ для этого. –

4

Why are you not using the NSJSONSerialization class? Я связал документацию Apple для вас, и теперь, когда вы знаете имя очень полезного класса, вы должны быть в состоянии легко найти множество учебников, которые вы можете использовать.

Просто подайте данные на это, и вы получите объект NSDictionary обратно.

И, конечно, следующая задача будет заключаться в том, что делать со всеми объектами Objective-C, которые появляются под вашим новым анализируемым словарем.

Один из способов сделать это через keyPaths. Например:

NSString * onOrOff = [receiveDataDict valueForKeyPath: @"row1.1"]; 

Here is a related question with some answers that may help you out.

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