Я создаю запрос POST JSON из Objective C, пользующегося библиотекой JSON как так:
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 stringWithString@"*"] forKey:@"bar"]; NSString *theBodyString = requestDictionary.JSONRepresentation; NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:theBodyData]; [[NSURLConnection alloc] initWithRequest:request delegate:self];
Когда я считал этот запрос в своем представлении Django, отладчик показывает, что это взяло всю строку JSON и сделало это первым ключом POST QueryDict:
POST QueryDict: QueryDict: {u'{"foo":"12","bar":"*"}': [u'']}> Error Could not resolve variable
Я могу считать первый ключ и затем повторно проанализировать использование JSON как взлом. Но почему строка JSON не отправляет правильно?
Мой жестокий прием для решения моей проблемы:
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']
Это позволит мне извлечь два значения JSON с дополнительным шагом на стороне сервера. Но он должен работать с одним шагом.