• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

NSData aus NSURLConnection in JSON

nelfisch

Carola
Registriert
15.03.08
Beiträge
108
Hallo Leute,

wieder einmal habe ich ein Problem: ich habe eine URL, von der ich mittels NSURLRequest und NSURLConnection einschließlich den entsprechenden Delegate-Methoden Daten empfange. Diese werden dann in einem NSMutabelData-Objekt gespeichert. Soweit, so gut, die Daten werden auch "korrekt" empfangen. Nun dachte ich eigentlich, dass diese Daten in JSON kommen, wollte das Data-Objekt also mittels
Code:
initWithData:(NSData*)data encoding:(NSStringEncoding)enc
in einen NSString umwandeln, um daraus anschließend meine Daten über den JSON-Parser auszulesen. Wenn ich die Data aber in den NSString umwandeln will, dann klappt das irgendwie nicht, vermute, das liegt an der Encoding.
Die NSLog()-Ausgabe des Data-Objektes unmittelbar nach dem Download:
Code:
fileContent ist: <3c21444f 43545950 45206874 6d6c3e0a 3c68746d 6c3e0a20 203c6865 61643e0a 20202020 3c746974 6c653e4c 6f67696e 202d2052 4c4f2d50 6c616e3c 2f746974 6c653e0a 20202020 3c6d6574 61206e61 6d653d22 524f424f 54532220 636f6e74 656e743d 224e4f49 4e444558 2c204e4f 464f4c4c 4f57223e 0a202020 200a2020 20202020 20202020 3c6d6574 61206874 74702d65 71756976 3d22436f 6e74656e 742d5479 70652220 636f6e74 656e743d 22746578 742f6874 6d6c3b63 68617273 65743d75 74662d38 223e0a20 20202020 20202020 203c6c69 6e6b2072 656c3d22 7374796c 65736865 65742220 68726566 3d227374 796c652e 63737322 20747970 653d2274 6578742f 63737322 206d6564 69613d22 616c6c22 3e0a2020 20202020 20202020 3c6c696e 6b207265 6c3d2273 74796c65 73686565 74222068 7265663d 22707269 6e742e63 73732220 74797065 3d227465 78742f63 73732220 6d656469 613d2270 72696e74 223e0a20 20202020 20202020 200a2020 3c2f6865 61643e0a 20203c62 6f64793e 0a202020 203c6469 76206964 3d226f76 705f6e61 7669223e 0a202020 20202020 20202020 20202020 203c6120 68726566 3d22696e 6465782e 7068703f 736f7572 63653d61 626f7574 223ec39c 62657220 524c4f2d 506c616e 3c2f613e 207c204c 6f67696e 0a202020 20202020 20202020 2020203c 2f646976 3e0a2020 20203c64 69762063 6c617373 3d226f76 705f636f 6e746169 6e657222 3e0a2020 20202020 20202020 3c68313e 4c6f6769 6e3c2f68 313e0a20 20202020 20202020 203c703e 556d2064 69657365 20536569 746520c3 b666666e 656e207a 75206bc3 b66e6e65 6e2c2062 656ec3b6 74696765 6e205369 65206569 6e20656e 74737072 65636865 6e642061 75746f72 69736965 72746573 2042656e 75747a65 726b6f6e 746f2e3c 2f703e0a 20202020 20202020 20203c66 6f726d20 61637469 6f6e3d22 696e6465 782e7068 703f706f 73746572 3d6c6f67 696e2663 6f6e7469 6e75653d 696e6465 782e7068 70253346 736f7572 63652533 44707562 6c696325 3236636f 75727365 25334422 206d6574 686f643d 22504f53 54223e0a 20202020 20202020 20202020 3c746162 6c652069 643d226f 76705f74 61626c65 5f6c6f67 696e223e 0a202020 20202020 20202020 2020203c 74723e0a 20202020 20202020 20202020 20202020 3c74643e 4e616d65 3a3c2f74 643e0a20 20202020 20202020 20202020 2020203c 74643e3c 696e7075 74207479 70653d22 74657874 22206e61 6d653d22 6e616d65 223e3c2f 74643e0a 20202020 20202020 20202020 20203c2f 74723e0a 20202020 20202020 20202020 20203c74 723e0a20 20202020 20202020 20202020 2020203c 74643e50 61737377 6f72743a 3c2f7464 3e0a2020 20202020 20202020 20202020 20203c74 643e3c69 6e707574 20747970 653d2270 61737377 6f726422 206e616d 653d2270 7764223e 3c2f7464 3e0a2020 20202020 20202020 20202020 3c2f7472 3e0a2020 20202020 20202020 20202020 3c74723e 0a202020 20202020 20202020 20202020 203c7464 3e3c2f74 643e0a20 20202020 20202020 20202020 2020203c 74643e3c 696e7075 74207479 70653d22 7375626d 69742220 76616c75 653d224c 6f67696e 223e3c2f 74643e0a 20202020 20202020 20202020 20203c2f 74723e0a 20202020 20202020 20202020 3c2f7461 626c653e 0a202020 20202020 2020203c 2f666f72 6d3e3c2f 6469763e 0a20203c 2f626f64 793e0a3c 2f68746d 6c3e>
Ne Ahnung was das für ein Encoding/File-Format ist? Wenn ich das wenigstens wüsste, könnte ich mir zur Not auch noch einen anderen Parser suchen...
Oder mache ich beim Umwandeln und so ein Fehler? Hier der Quelltext:
Code:
#pragma mark -
#pragma mark loading the Data including parsing Methods
-(void)doRequestToURLWithString:(NSString*)aString{
	NSURLRequest* publicRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:aString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
	NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:publicRequest delegate:self];
	if (theConnection) {
		// Create the NSMutableData to hold the received data.
		// receivedData is an instance variable declared elsewhere.
		receivedData = [[NSMutableData data] retain];
		NSLog(@"NSURLConnection wurde erfolgreich aufgebaut!");
	} else {
		// Inform the user that the connection failed.
	}
}
-(NSDictionary*)parseData:(NSData*)aData{
	NSString *fileContent = [aData description];
	NSLog(@"fileContent ist: %@", fileContent); //hier ist dieses komische Format von oben
	// creating new parser  
    SBJSON *parser = [[SBJSON alloc] init];  
	// parsing the first level  
    NSDictionary *data = (NSDictionary *) [parser objectWithString:fileContent error:nil];
	NSLog(@"data: %@", data);
	return data;
}
#pragma mark -
#pragma mark NSURLConnection Delegate Methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
	[receivedData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
	[receivedData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
	NSDictionary* parsedDict = (NSDictionary*)[self parseData:receivedData];
	NSLog(@"parsedDict ist: %@", parsedDict); //hier kommt als Ausgabe "(null)"
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
	NSLog(@"Error! %@", error);
}
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Code:
NSString *fileContent = [aData description];
das kann ja nur schief gehen... benutze besser:
Code:
NSString *fileContent = [[[NSString alloc] initWithData:aData encoding:_enc] autorelease];

was das _enc dann ist, kann ich dir auch nicht sagen, musst in der Doku unter NSStringEncoding nachsehen und das Richtige finden!

Gruss ppocket

PS: In der Methode parseData: machst du ein Memory-Leak. Überleg dir mal, was du mit dem Parser vor dem return der Daten noch machen musst... Genau dasselbe in der oberen Methode mit der NSURLConnection, wobei das wahrscheinlich nicht direkt in der Methode selbst sinnvoll wäre :)...