2016-11-29 4 views
-1

Kann jemand bitte helfen Sie mir die folgenden jsonData in ein NSDictionary Objektnicht analysieren konnte JSON-Daten aus Finanzierungs google

[{ "id" in Parsen: "22144", "t": "AAPL",“ e ":" NASDAQ "," l ":" 111,57 " ," l_fix ":" 111,57 "," l_cur ":" 111,57 "," s ":" 2 "," ltt ":" 4:00 PM EST " , "lt": "28. November, 16.00 Uhr EST", "lt_dts": "2016-11-28T16: 00: 01Z", "c": "-0,22", "c_fix": "-0,22" , "cp": "-0,20", "cp_fix": "-0,20", "ccol" : "chr", "pcls_fix": "111,79", "el": "111,56", "el_fix": "111,56 , el_cur: 111,56, elt: 28.11., 20:00 Uhr EST, ec: -0,01 , ec_ fix ":" -0,01 "," ecp ":" -0,01 "," ecp_fix ":" -0,01 "," ecol ": " chr "," div ":" 0,57 "," yld ":" 2,04 " }]

#define QUERY_PREFIX @"https://www.google.com/finance/info?q=NSE:AAPL" 
#define QUERY_SUFFIX @"NSE:AAPL" 

@implementation YQL 

- (NSDictionary *) query: (NSString *)statement { 


    NSString *query = [NSString stringWithFormat:@"%@%@%@", QUERY_PREFIX, [statement stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding], QUERY_SUFFIX]; 
    NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding]; 

    NSString *dataString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    NSUInteger firstCurlyBracePos = [dataString rangeOfString:@"[" options:0].location; 
    NSUInteger lastCurlyBracePos = [dataString rangeOfString:@"]" options: NSBackwardsSearch].location; 
    NSString *jsonString = nil; 
    if(firstCurlyBracePos != NSNotFound && lastCurlyBracePos != NSNotFound) { 
     jsonString = [dataString substringWithRange:NSMakeRange(firstCurlyBracePos, (lastCurlyBracePos-firstCurlyBracePos)+1)]; 
    } 

    NSData *someData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSLog(@"%@ Nirmal",jsonString); 
    NSError *error = nil; 
    NSDictionary *results = [NSJSONSerialization JSONObjectWithData:someData options:0 error:&error]; 

    NSLog(@"%@ Anand",results); 
    NSString* latestLoans = [results objectForKey:@"el_cur"]; 

    NSLog(@"loans: %@", latestLoans); 


    if (error) NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription); 

    return results; 
} 

@end 

beenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: '- [__ NSSingleObjectArrayI objectForKey:]: Unbekannter Selektor an Instanz gesendet 0x61800000d010'

+0

Es ist ein gültiger JSON. Und Sie verwenden 'NSJSONSerialization'. Aber da das erste Objekt Array ist, benutze Patrick's Vorschlag. – rptwsthi

+0

Warum konvertieren Sie Ihre 'JSON'' NSData' in eine Zeichenfolge und konvertieren die Zeichenfolge dann zurück in 'NSData'? Sieht für mich so aus, als würden Sie versuchen, das äußere Array mit Hilfe von String-Parsing zu entfernen. Tu das nicht. Konvertiere das Ganze einfach in ein JSON-Objekt und analysiere das. Und sind die doppelten Schrägstriche ("//") Teil der Daten, die Sie bekommen, oder haben Sie das hinzugefügt? –

Antwort

1

Die JSON Sie versuchen zu analysieren ist ein Array, kein Objekt, wie durch die umschließenden eckigen Klammern angezeigt. Daher wird NSJSONSerialization hier ein NSArray zurückgeben, kein NSDictionary. Da es scheinbar nur ein Objekt in diesem Array gibt, können Sie folgendermaßen darauf zugreifen:

NSArray *results = [NSJSONSerialization JSONObjectWithData:someData options:0 error:&error]; 

NSDictionary *object = results.firstObject; 

NSString *latestLoans = object["el_cur"]; 
Verwandte Themen