2016-05-21 9 views
1

Ich habe Probleme mit der Analyse/Rückgabe von JSON von einer URL-Antwort. Hier ist ein Beispiel(POST-Anfrage) Parsen Sie JSON-Elemente von einer URL-Antwort in Objective-C

kann sagen, Ich gebe diese an einen Server [POST nicht GET]

firstname=first&lastname=last&age=99 

und die Antwort vom Server ist dies

{ 
    "person":{ 
     "firstname":"first", 
     "lastname":"last", 
     "info":{ 
     "age":"99" 
     } 
    } 
} 

wie würde ich diese Informationen abrufen (bestimmte Elemente)

lässt sagen, ich möchte nur die Personen Alter, so sollte die Return-String nur "99" sein oder wie kann ich nur den Nachnamen oder nur die Firstnam e, eine andere Sache, wie würde ich das zurückgegebene Element in die nächste POST-Anfrage übergeben, ohne dass der Benutzer es erneut eingeben muss?

wenn jemand ein Beispiel finden, das wäre fantastisch :)

Vielen Dank!

Antwort

0

sagen wir mal der Name dieser Daten ist JSON (Sie nannte es Antwort). Dies ist ein Wörterbuch. Dies bedeutet, dass es Schlüssel-Wert-Paare gibt. Um darauf zuzugreifen, gehen Sie folgendermaßen vor: Um eine dieser Informationen in das Wörterbuch zu bekommen, brauchen Sie nur eine Zeile Code !!

Detail einer Person Vornamen zu bekommen,

[response valueForKeyPath:@"person.firstname"]; 

Nachname Um:

[response valueForKeyPath:@"person.lastname"]; 

Alter zu erhalten:

[response valueForKeyPath:@"person.info.age"]; 
0

Hmm ... Wenn es Ich würde mir einfach das NSDictionary holen und dann in das NSDictionary schauen.

Um Alter:

Sie wollen würde { "firstname":"first", "lastname":"last", "info":{ "age":"99" } }, zu bekommen, so tun:

[responseObject objectForKey:@"person"]; 

Nachdem Sie das tun, würden Sie { "age":"99" } zu bekommen. Um dies zu erreichen, sollen Sie

[[responseObject objectForKey:@"person"]objectForKey:@"info"]; 

Danach, 1 letzten Schritt, um den Wert für das Alter zu erhalten:

[[[responseObject objectForKey:@"person"]objectForKey:@"info"]objectForKey:@"age"]; 

Und dann haben Sie Alter.

Um Vornamen

einfach finden Sie das Objekt für Schlüssel Vornamen zu erhalten, indem Sie:

[[responseObject objectForKey:@"person"]objectForKey:@"firstname"]; 

Um Nachnamen

[[responseObject objectForKey:@"person"]objectForKey:@"lastname"]; 

... Der Rest folgt die bekommen sollte gleiche Regel.

Wie es auf eine POST-Anfrage zurück passieren

Nun erfolgt die POST-Anforderung in einem id parameters. Hier würden Sie das Wörterbuch stellen. Um dies korrekt durchzuführen, ohne mit einer Asynchronität umgehen zu müssen, müssten Sie die POST-Anforderung innerhalb der GET-Anforderung durchführen. Zum Beispiel:

[manager GET:<your GET url> 
    parameters:nil 
    success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     [manager POST:<your POST url> 
      parameters:responseObject 
       success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Success!"); } 
       failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 

Nun, das ist es ziemlich viel. Hoffe das hat geholfen :)