2013-04-23 2 views
0

У меня есть это (очень длинный) JSon файл, который нужно разобратьObjective C: Разбираем суб JSON объектов

{ 
    "_status": "success", 
    "_data": { 
    "clients": [{ 
     "id": 1, 
     "name": "Audi Bank", 
     "contacts": [{ 
      "id": 1, 
      "first_name": "Raymond", 
      "last_name": "Audi", 
      "templates": [{ 
       "id": 1, 
       "name": "SecurityQuestionnaire", 
       "title": "Security Questionnaire", 
       "creation_date": "2012-08-12", 
       "sections": [{ 
        "id": 2, 
        "title": "Personal questions", 
        "header": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 
        "footer": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 
        "questions": [{ 
         "id": 1, 
         "type": "MCQ_question", 
         "value": "What type of firewall would you like to install?", 
         "answers": [{ 
          "id": 1, 
          "answer": "Network layer or packet filters" 
          }, { 
          "id": 2, 
          "answer": "Application-layer" 
          }, { 
          "id": 3, 
          "answer": "Proxies" 
          }, { 
          "id": 4, 
          "answer": "Network address translation" 
          } 
         ] 
         }, { 
         "id": 3, 
         "type": "numerical_question", 
         "value": "How many posts do you have approximatively in your company?" 
         }, { 
         "id": 4, 
         "type": "short_answer_question", 
         "value": "What is the name of your IT manage?" 
         } 
        ] 
        }, { 
        "id": 5, 
        "title": "Professional experience", 
        "questions": [{ 
         "id": 6, 
         "type": "long_answer_question", 
         "value": "Tell us about your business needs" 
         }, { 
         "id": 8, 
         "type": "association", 
         "value": "Link the department with its number of switches", 
         "answers": { 
          "left": [{ 
           "id": 6, 
           "answer": "Financial Department" 
          }, { 
           "id": 7, 
           "answer": "Marketing Department" 
          }, { 
           "id": 8, 
           "answer": "HR Department" 
          } 
          ], 
          "right": [{ 
           "id": 9, 
           "answer": "over 100" 
          }, { 
           "id": 10, 
           "answer": "under 100" 
          } 
          ] 
         } 
         }, { 
         "id": 7, 
         "type": "text", 
         "title": "Remarks", 
         "value": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
         } 
        ] 
        } 
       ] 
       }, { 
       "id": 2, 
       "name": "bbbb", 
       "title": "bbb", 
       "creation_date": "2000-09-11", 
       "sections": [{ 
        "id": 2, 
        "title": "Personal questions", 
        "header": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 
        "footer": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 
        "questions": [{ 
         "id": 1, 
         "type": "MCQ_question", 
         "value": "What type of firewall would you like to install?", 
         "answers": [{ 
          "id": 1, 
          "answer": "Network layer or packet filters" 
          }, { 
          "id": 2, 
          "answer": "Application-layer" 
          }, { 
          "id": 3, 
          "answer": "Proxies" 
          }, { 
          "id": 4, 
          "answer": "Network address translation" 
          } 
         ] 
         }, { 
         "id": 3, 
         "type": "numerical_question", 
         "value": "How many posts do you have approximatively in your company?" 
         }, { 
         "id": 4, 
         "type": "short_answer_question", 
         "value": "What is the name of your IT manage?" 
         } 
        ] 
        }, { 
        "id": 5, 
        "title": "Professional experience", 
        "questions": [{ 
         "id": 6, 
         "type": "long_answer_question", 
         "value": "Tell us about your business needs" 
         }, { 
         "id": 8, 
         "type": "association", 
         "value": "Link the department with its number of switches", 
         "answers": { 
          "left": [{ 
           "id": 6, 
           "answer": "Financial Department" 
          }, { 
           "id": 7, 
           "answer": "Marketing Department" 
          }, { 
           "id": 8, 
           "answer": "HR Department" 
          } 
          ], 
          "right": [{ 
           "id": 9, 
           "answer": "over 100" 
          }, { 
           "id": 10, 
           "answer": "under 100" 
          } 
          ] 
         } 
         }, { 
         "id": 7, 
         "type": "text", 
         "title": "Remarks", 
         "value": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
         } 
        ] 
        } 
       ] 
       } 
      ] 
      } 
     ] 
     }, { 
     "id": 2, 
     "name": "Byblos Bank", 
     "contacts": [{ 
      "id": 2, 
      "first_name": "Antoine", 
      "last_name": "Atallah", 
      "templates": [{ 
       "id": 1, 
       "name": "SecurityQuestionnaire", 
       "title": "Security Questionnaire", 
       "creation_date": "2012-08-12", 
       "sections": [{ 
        "id": 2, 
        "title": "Personal questions", 
        "header": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 
        "footer": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 
        "questions": [{ 
         "id": 1, 
         "type": "MCQ_question", 
         "value": "What type of firewall would you like to install?", 
         "answers": [{ 
          "id": 1, 
          "answer": "Network layer or packet filters" 
          }, { 
          "id": 2, 
          "answer": "Application-layer" 
          }, { 
          "id": 3, 
          "answer": "Proxies" 
          }, { 
          "id": 4, 
          "answer": "Network address translation" 
          } 
         ] 
         }, { 
         "id": 3, 
         "type": "numerical_question", 
         "value": "How many posts do you have approximatively in your company?" 
         }, { 
         "id": 4, 
         "type": "short_answer_question", 
         "value": "What is the name of your IT manage?" 
         } 
        ] 
        }, { 
        "id": 5, 
        "title": "Professional experience", 
        "questions": [{ 
         "id": 6, 
         "type": "long_answer_question", 
         "value": "Tell us about your business needs" 
         }, { 
         "id": 8, 
         "type": "association", 
         "value": "Link the department with its number of switches", 
         "answers": { 
          "left": [{ 
           "id": 6, 
           "answer": "Financial Department" 
          }, { 
           "id": 7, 
           "answer": "Marketing Department" 
          }, { 
           "id": 8, 
           "answer": "HR Department" 
          } 
          ], 
          "right": [{ 
           "id": 9, 
           "answer": "over 100" 
          }, { 
           "id": 10, 
           "answer": "under 100" 
          } 
          ] 
         } 
         }, { 
         "id": 7, 
         "type": "text", 
         "title": "Remarks", 
         "value": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
         } 
        ] 
        } 
       ] 
       } 
      ] 
      } 
     ] 
     } 
    ] 
    } 
} 

Проблема, с которой я столкнулся в том, что у меня есть много суб JSON объектов я написал эта функция разобрать этот файл

-(void)readJson 
{ 
    //Emplacement du json file 
    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"allClients?userId=2" ofType:@"json"]; 
    //Contenu du fichier 
    NSString *jsonString = [NSString stringWithContentsOfFile:filePath]; 
    NSError *error; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error]; 



    id wordParam = [[json objectForKey:@"words"] objectForKey:@"word"]; 

    if ([wordParam isKindOfClass:[NSArray class]]) { 
     NSDictionary *word = [(NSArray *)wordParam objectAtIndex:0]; 
    } else if ([wordParam isKindOfClass:[NSDictionary class]]) { 
     NSDictionary *word = (NSDictionary *)wordParam; 
    } else { 
     NSLog(@"error. %@ is not an array or dictionary", wordParam); 
    } 


    //_data 
    NSDictionary *items = [json objectForKey:@"_data"]; 
    for (NSDictionary *item in items) 
    { 
     NSDictionary *clients = [items objectForKey:@"clients"]; 
     for(NSDictionary *client in clients) 
     { 
     NSString * clientId=[client objectForKey:@"id"]; 
     NSString * name=[client objectForKey:@"name"]; 
     @try{ 
     NSDictionary *contacts=[clients objectForKey:@"contacts"]; 
      } 
      @catch (NSException *ex) { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"%@",ex] 
                   delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
       [alert show]; 
      } 


     } 
    } 
} 

Эта функция является давая мне исключение здесь:

NSDictionary *contacts=[clients objectForKey:@"contacts"]; 

Я новичок в этом Спасибо за вашу помощь и терпение

+0

Не могли бы вы правильно откорректировать ваш вопрос. Это слишком сумасшедший, чтобы даже начать делать это сам. – Popeye

+3

Это просто простой «JSON» - ничего особенного. Вы «очищаете» один слой за раз, как лук. Ваша проблема в том, что «клиенты» представляют собой массив (из 2 элементов), а не словарь. «Достаточно напечатать» JSON с помощью онлайн-форматирования, такого как [этот] (http://json.parser.online.fr/), и использовать NSLog с каждым слоем, чтобы изучить, что у вас есть. (Просто имейте в виду, что NSLog заменяет '[]' на '()'.) –

+0

@Popeye - использовать онлайн-форматирование - это лучше, чем пытаться читать JSON в SO-окне в любом случае. –

ответ

0

NSDictionary * контакты = [клиентов objectForKey: @ "контакты"];

Возможно, это должно быть [client objectForKey:@"contacts"]. Уведомление client в единственном числе, а не в множественном числе.

+1

Но это тоже неправильно: 'NSDictionary * clients = [items objectForKey: @" clients "];' –

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