2016-04-22 2 views
0

Глядя на него в течение некоторого времени и старался изо всех сил, насколько мне известно, но все равно без успеха.Разбирать JSON из массива в NSDictionary? (ObjC)

Как я могу разобрать следующий JSON, чтобы получить первый массив в словаре? Я использую AFNetworking библиотеку и responseObject возвращает следующее:

(
y, 
    (
    yeti, 
    "yeti tumbler", 
    "yoga pants", 
    "yoga mat", 
    "yeezy boost 350", 
    "yeti cup", 
    yoga, 
    yeezy, 
    "young living essential oils", 
    yugioh 
), 
    (
      { 
     nodes =    (
          { 
       alias = garden; 
       name = "Home & Kitchen"; 
      }, 
          { 
       alias = "outdoor-recreation"; 
       name = "Outdoor Recreation"; 
      }, 
          { 
       alias = "fan-shop"; 
       name = "Sports Fan Shop"; 
      } 
     ); 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    } 
), 
    (
) 

)

Теперь, как я могу получить первый массив в NSDictionary?

(
    yeti, 
    "yeti tumbler", 
    "yoga pants", 
    "yoga mat", 
    "yeezy boost 350", 
    "yeti cup", 
    yoga, 
    yeezy, 
    "young living essential oils", 
    yugioh 
) 

ObjC код:

- (void)requestJSONWithQuery:(NSString *)query 
{ 
    if (!_requestOperation.isCancelled) [_requestOperation cancel]; 
    query = [query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    NSString *string = [NSString stringWithFormat:_URLDictionaryForAPIs[@(_APIType)], query]; 
    NSURL *url = [NSURL URLWithString:string]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    _requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    _requestOperation.responseSerializer = [AFJSONResponseSerializer serializer]; 
    __block FFFGoogleSearchAutoCompleteController *selfInBlock = self; 
    [_requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 


    // NSLog(@"%@", responseObject); 
     selfInBlock.suggestions = [(NSDictionary *)responseObject mutableArrayValueForKey:query]; 
     [selfInBlock refreshSuggestionTable]; 


    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 


    }]; 
    [_requestOperation start]; 
} 

Это возвращает следующее сообщение об ошибке:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSTaggedPointerString 0xa0000000000006b1> valueForUndefinedKey:]: this class is not key value coding-compliant for the key K.' 
+0

Какой формат вы хотите, словарь иметь? Каковы ваши объекты? Каковы ваши ключи? – headbanger

+0

Каково значение 'query'? И что делает печать 'responseObject'? По виду вашего первого отпечатка 'responseObject' он выглядит как многомерный массив. – Larusso

+0

responseObject печатает первый кодовый блок в моем сообщении выше. Значение запроса - вставленный текст. Файл JSON выглядит так: http://completion.amazon.com/search/complete?search-alias=aps&client=amazon-search-ui&mkt=1&q=k – Jan

ответ

1

["k",["kindle","kindle fire","kindle books","keurig","knife","kate spade","keyboard","kindle paperwhite","knife sharpener","kindle fire case"],[{"nodes":[{"name":"Kindle Store","alias":"digital-text"},{"name":"Electronics","alias":"electronics"},{"name":"Computers","alias":"computers"}]},{},{},{},{},{},{},{},{},{}],[]] не словарь. Ваш ответ - массив. Первый элемент - это запрос. Второе - это то, что вы хотите. Я хотел бы попробовать сделать это для теста:

selfInBlock.suggestions = [(NSArray *)responseObject objectAtIndex:1];

+0

Вы спасли день! Бесконечно благодарен! Конечно, это должен быть второй объект. – Jan

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