SBJson Execptions after parsing (__NSArrayM objectForKey:)

I’ve some problems trying to parse Json using SBJson, I did some research and I can’t find something helpfull…

I followed some blog about how to do it, but I still get that error : “__NSArrayM objectForKey:”

  • SWRevealViewController push from subview
  • Overlay an UIButton over an UIWebView in Swift
  • background Images on pageViewController overlap in reverse
  • Auth state change listener being fired twice?
  • how to encrypt and decrypt a String(Plain Text) with RSA public key in ios, swift
  • Save UIImage, Load it in Wrong Orientation
  • So this is the Json I’m trying to parse :

    {
    "result": [
        {
            "authors": [
                "Eric Ries"
            ],
            "bc": 9780671607,
            "title": "Yeah",
            "urlImage": "www.yeah.hey",
            "description": "Hey..."
        }
        ]
    }
    

    This is the code I’m using :

    SBJsonParser *json;
    NSDictionary *jsonResults;
    NSError *jsonError;
    
    json = [ SBJsonParser new ];
    
    // Get result in a NSDictionary
    jsonResults = (NSDictionary*) [ json objectWithString:output error:&jsonError ];
    
    // Check if there is an error
    if (jsonResults == nil) {
        NSLog(@"Erreur lors de la lecture du code JSON (%@).", [ jsonError localizedDescription ]);  
    } else {
        NSDictionary *book = (NSDictionary *)[ jsonResults objectForKey:@"result"];
        NSArray *items = (NSArray *) [book objectForKey:@"title"];
    }
    

    The error :

    -[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7a2d390
    2012-11-19 20:32:36.336 FMS[500:11f03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7a2d390'
    *** First throw call stack:
    (0x2245012 0x16a3e7e 0x22d04bd 0x2234bbc 0x223494e 0x8c6a 0x36093 0xb39e83 0x2204376 0x2203e06 0x21eba82 0x21eaf44 0x21eae1b 0x219f7e3 0x219f668 0x8365c 0x2d6d 0x2c95)
    libc++abi.dylib: terminate called throwing an exception
    Current language:  auto; currently objective-c
    

    And by using valueForKey intead of objectForKey

    [book valueForKey:@"title"];
    

    I’m getting this :

    (
        "Yeah"
    )
    

    Instead of just Yeah

    And I don’t want to parse again the ( “Yeah” ) to at least get Yeah…

    Solutions Collect From Internet About “SBJson Execptions after parsing (__NSArrayM objectForKey:)”

    You get that error because “book” is an array, not a dictionary. If all the results look like this one, that is “book” only has one outer object in it. You can just change the line defining book to :

    NSDictionary *book = [[ jsonResults objectForKey:@"result"] lastObject];