2010-04-05 4 views
6

Ich bin ein JSON-POST-Anforderung von Objective C Erstellung der JSON-Bibliothek wie folgt:iphone Json POST-Anforderung an Django-Server erstellt QueryDict innerhalb QueryDict

 
NSMutableURLRequest *request; 
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@/", host, action]]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/json-rpc" forHTTPHeaderField:@"Content-Type"]; 
NSMutableDictionary *requestDictionary = [[NSMutableDictionary alloc] init]; 
[requestDictionary setObject:[NSString stringWithString:@"12"] forKey:@"foo"]; 
[requestDictionary setObject:[NSString [email protected]"*"] forKey:@"bar"]; 

NSString *theBodyString = requestDictionary.JSONRepresentation; 
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding]; 
[request setHTTPBody:theBodyData]; 
[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Als ich diese Anfrage in meinem Django lesen Sie den Debugger sehen zeigt nahm es die gesamte Zeichenfolge JSON und es der erste Schlüssel des POST QueryDict gemacht:

 
POST QueryDict: QueryDict: {u'{"foo":"12","bar":"*"}': [u'']}> Error Could not resolve variable 

ich den ersten Schlüssel lesen und Analysepunkte, dann als ein Hack mit JSON. Aber warum wird die JSON-Zeichenfolge nicht korrekt gesendet?

Antwort

0

Mein grausamer Hack um mein Problem zu umgehen ist:

 
hack_json_value = request.POST.keys()[0] 
hack_query_dict = json.loads(hack_json_value) 
foo = hack_query_dict['foo'] 
bar = hack_query_dict['bar'] 

So wird dies erlauben Sie mir, den beide JSON-Wert mit einem zusätzlichen Schritt auf Server-Seite zu extrahieren. Aber es sollte mit einem Schritt funktionieren.

3

Dies ist der Weg, um eine POST-Anfrage mit JSON-Daten zu verarbeiten:

def view_example(request): 
    data=simplejson.loads(request.raw_post_data) 

    #use the data 

    response = HttpResponse("OK") 
    response.status_code = 200 
    return response 
1

ich bereits mit diesem Thema beschäftigt habe. Ich fand eine vorübergehende Lösung als das Lesen der request.body dict. Ich nehme an, Sie haben die json/simplejson Bibliothek bereits importiert. Aus meiner Sicht:

post = request.body 
post = simplejson.loads(post) 
foo = post["foo"] 

Dieser Codeblock hat mir geholfen, Postausgabe zu passieren. Ich glaube, querydict in request.POST hat nicht richtig auf NSMutableURLRequest noch nicht entwickelt.

Verwandte Themen