Analisi di NSString come JSON

Ho letto diversi forum ma sono apparentemente in grado di realizzare questo semplice task. Ho una vista in Xcode che punta a uno script PHP e memorizza i risultati come NSString di seguito:

[{ "Id": "16", "name": "Bob", "età": "37"}]

Sto riscontrando problemi nell'analisi di questo NSString. Ecco come ottengo i contenuti di NSString:

NSString *strURL = [NSString stringWithFormat:@"http://www.website.com/json.php? id=%@",userId]; // to execute php code NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]]; // to receive the returend value NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding]; 

Come posso convertire il risultato (strResult) in JSON e prelevare gli oggetti da esso? Assumerei qualcosa di simile in basso, ma so che mi manca qualcosa

 NSString *name = [objectForKey:@"name"]; NSString *age = [objectForKey:@"age"]; 

Qualsiasi aiuto sarebbe grande. Grazie!

utilizzare la class NSJSONSerialization per leggerlo

 id jsonData = [string dataUsingEncoding:NSUTF8StringEncoding]; //if input is NSString id readJsonDictOrArrayDependingOnJson = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; 

nel tuo caso

 NSArray *readJsonArray = [NSJSONSerialization JSONObjectWithData:dataURL options:0 error:nil]; NSDictionary *element1 = readJsonArray[0]; //old style: [readJsonArray objectAtIndex:0] NSString *name = element1[@"name"]; //old style [element1 objectForKey:@"name"] NSString *age = element1[@"age"]; //old style [element1 objectForKey:@"age"] 

Prova questo….

 NSString * strResult = [[NSString alloc] initWithData:responseMutableData encoding:NSUTF8StringEncoding]; SBJSON *jsonParser = [[SBJSON alloc]init]; if([[jsonParser objectWithString:strResult] isKindOfClass:[NSArray class]]) { NSArray *jsonArr=[jsonParser objectWithString: strResult]; NSDictionary *firstDictonary = [jsonArr objectAtIndex:0]; NSString *name = [firstDictonary valueForKey:@"name"]; NSString *age = [firstDictonary valueForKey:@"age"]; } 

Se utilizzi il targeting per iOS 5 e versioni successive, utilizza NSJSONSerialization

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html

Se il tuo targeting è inferiore a iOS 5, utilizza un parser JSON come questo: http://stig.github.com/json-framework/

E chiama semplicemente il metodo JSONValue (o equivalente) sulla tua string JSON:

 NSDictionary *dict= [strResult JSONValue]; NSString *name = [dict objectForKey:@"name"]; NSString *age = [dict objectForKey:@"age"]; 

A proposito, la tua string JSON ha l'aspetto di una matrix e non puoi usare objectForKey per get oggetti da un NSArray . Hai due opzioni, modifica la risposta della string JSON come dictionary o usa objectAtIndex per get oggetti.