JSON-Antwort in postPath AFHTTPClient
Ich wechselte zu RestKit 0.2 und ich bin derzeit mit dem neuen "HttpClient" das ist im Grunde ein AFHTTPClient. Ich habe diese Codezeile:
RKObjectManager* objectManager = [RKObjectManager sharedManager];
NSDictionary* params = [[NSDictionary alloc] initWithObjectsAndKeys: login, @"username", password, @"password", nil];
[[objectManager HTTPClient]postPath:@"users/login/?format=json" parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
//reponseObject vs operation.response
NSLog(@"%@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"ERROR");
}];
Dieser BEITRAG ruft wieder eine JSON-Antwort in der form: {"api_key":"....","Benutzername":"...."}. So einfach ist das.
Vor dem Wechsel zu 0,2, ich war in der Lage, die api_key Schlüssel in der Antwort zu tun:
[[RKClient sharedClient] post:@"/users/login/?format=json" usingBlock:^(RKRequest *request)
{
request.onDidLoadResponse = ^(RKResponse *response)
{
id parsedResponse = [response parsedBody:NULL];
NSString *apiKey = [parsedResponse valueForKey:@"api_key"];
}
}.....];
http://restkit.org/api/master/Classes/RKResponse.html
Aber jetzt, ich kann das nicht tun, und wenn ich einen NSLog auf die responseObject, bekomme ich:
<7b227265 61736f6e 223a2022 41504920 4b657920 666f756e 64222c20 22617069 5f6b6579 223a2022 61356661 65323437 66336264 35316164 39396338 63393734 36386438 34636162 36306537 65386331 222c2022 73756363 65737322 3a207472 75657d>
Und die seltsame Sache ist, dass, wenn ich tun:
NSLog(@"%@", operation.responseString);
Ich habe den JSON (in NSString) angezeigt.
Also zwei Fragen:
1) Warum ist der Druck der responseObject zeigt mir, HEX-code, und nicht die tatsächlich JSON-response?
2) Warum, wenn ich den Betrieb.responseString es zeigt die aktuelle Response-Objekt? Gibt es einen Weg, um die tatsächlichen Daten in ResponseObject nach analysiert wird aus der JSON?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie sehen, wenn ich mich nicht Irre, ist die raw-bytes aus dem NSData, die ist Euch gegeben, wenn Ihr Erfolg-block aufgerufen wird.
Hex, die Sie geschrieben liest:
{"reason": "API Key found", "api_key": "a5fae247f3bd51ad99c8c97468d84cab60e7e8c1", "success": true}
Den Grund der zweiten
NSLog
zeigt Ihnen, was Sie wollen, ist, dass die%@
format-string ruft die Beschreibung (korrigiert mich wenn ich falsch bin, hier, SO) von dem Objekt, das Sie an ihm und denNSData
wahrscheinlich weiß, es ist ein string, der unter.Also, auf auf, wie man die JSON. Es ist wirklich ziemlich einfach. Sobald Sie Ihre response-Objekt, können Sie etwas wie das hier tun:
NSDictionary* jsonFromData = (NSDictionary*)[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:&error];
Was wird dies für Sie tun ist legen Sie der Rücksendung eine
NSDictionary
codiert das das root-Objekt in das JSON-und dann jeden Wert in das Wörterbuch wird von der ArtNSString
,NSNumber
,NSArray
,NSDictionary
oderNSNull
. Sehen NSJSONSserialization für die Dokumentation.Den
NSJSONReadingMutableContainers
lässt den dictionaries und arrays verändert werden. Es ist nur ein überbleibsel aus meinem code.Hoffentlich bist du auf iOS 5 oder höher, oder Sie müssen eine andere Lösung finden für die Analyse.
AFNetworking sollte instanziieren
AFJSONRequestOperation
. Wahrscheinlich schafft es eine grundlegendeAFHTTPRequestOperation
statt (check[operation class]
), die sich in ein NSData-Objekt als Antwort.Stellen Sie sicher, melden Sie sich die Bedienung der Klasse in der init-Methode des AFHTTPClient Unterklasse (initWithBaseURL):
Könnte man auch versuchen, AFJSONRequestOperation direkt so: