2016-04-22 2 views
0

Ich schaue es schon seit einiger Zeit an und versuche jeden möglichen Weg meines Wissens, aber immer noch ohne Erfolg.Parse JSON aus einem Array in NSDictionary? (ObjC)

Wie kann ich den folgenden JSON parsen, um das erste Array in ein Wörterbuch zu bringen? Ich bin mit der AFNetworking Bibliothek und die responseObject gibt die folgenden:

(
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"; 
      } 
     ); 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    }, 
      { 
    } 
), 
    (
) 

)

Nun, wie kann ich das erste Array in eine NSDictionary bekommen?

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

ObjC Code:

- (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]; 
} 

Dies wird die folgende Fehlermeldung zurück:

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

In welchem ​​Format mögen Sie das Wörterbuch haben? Was sind deine Objekte? Was sind deine Schlüssel? – headbanger

+0

Was ist der Wert von 'query'? Und was druckt das 'responseObject'? Durch das Aussehen Ihres ersten Ausdrucks von "responseObject" sieht es wie ein mehrdimensionales Array aus. – Larusso

+0

ResponseObject druckt den ersten Codeblock in meinem Beitrag oben. Wert der Abfrage ist der eingefügte Text. Die JSON-Datei sieht folgendermaßen aus: http://completion.amazon.com/search/complete?search-alias=aps&client=amazon-search-ui&mkt=1&q=k – Jan

Antwort

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"}]},{},{},{},{},{},{},{},{},{}],[]] kein Wörterbuch ist. Ihre Antwort ist ein Array. Das erste Element ist die Abfrage. Das zweite scheint das zu sein, was du willst. Ich würde versuchen, dies für einen Test zu machen:

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

+0

Sie haben den Tag gerettet! Tausend Dank! Natürlich sollte es das zweite Objekt sein. – Jan