Передача JSON из ASIHTTPRequest в Django
Я исчерпал другие темы, поэтому я публикую этот вопрос здесь. Прошу прощения за любые ошибки новичка, которые я сделал по пути. Я много читал и думаю, что запутался.
Цель: я пытаюсь передать данные из формы в target-c в мой веб-сервис django. Чтобы помочь с этим, я нанял ASIHTTPRequest
класс для облегчения передачи информации. После отправки в веб-службу я хотел бы сохранить эти данные в моей базе данных sqlite3.
Процедура: Со стороны Objective C: я сохранил введенные данные формы и их соответствующие ключи в NSDictionary, как это:
NSDictionary *personInfo = [NSDictionary dictionaryWithObjectsAndKeys:firstName.text, @"fName", middleName.text, @"mName", lastName.text, @"lName", nil];
Я добавил его в свой ASIHTTPRequest в другом классе с помощью делегата. Я сделал NSDictionary таким же, как и выше, в блоке кода ниже для простоты, например:
NSString *jsonPerson = [personInfo JSONRepresentation];
[request addRequestHeader: @"Content-Type" value:@"application/json; charset=utf-8"];
[request appendPostData:[jsonPerson dataUsingEncoding:NSUTF8StringEncoding]];
[request setRequestMethod:@"POST"];
[request startAsynchronous];
И NSLog показывает строку, которую я передаю, чтобы выглядеть так, которая проверяет, по крайней мере, в JSONLint
{"mName":"Arthur","lName":"Smith","fName":"Bob"}
Поскольку я вижу, что, по-видимому, действительный JSON поступает из моего ASIHTTPRequest, а действия выполняются из requestfinished: вместо requestfailed:, я делаю предположение, что проблема, скорее всего, не на стороне Objective-C, а скорее на стороне джанго.
Вот что я пробовал до сих пор:
json.loads(request.POST)
>>expected string or buffer
json.loads('request.POST')
>>no JSON object to decode
json.loads(request.raw_post_data)
>>mNamelNamefName
incoming = request.POST
>>{"mName":"Arthur","lName":"Smith","fName":"Bob"}
incoming = request.POST
onlyValues = incoming.iterlists()
>>(u'{"mName":"Arthur","lName":"Smith","fName":"Bob"}', [u''])
... и немного других, казалось бы, надуманных вариаций. Я держал журнал, и могу уточнить. Единственная надежда, которую я смог найти, в последнем примере; похоже, он обрабатывает всю строку как ключ, а не разбивает каждый объект dict и ключ, как я ожидал.
Я понимаю, что это ужасно элементарно, и я обычно не спрашиваю, но эта проблема меня особенно озадачила. Я также помню, что читал где-то, что python не распознает двойные кавычки вокруг каждого объекта и ключа, что для получения того, что нравится django, каждый должен быть заключен в одинарные кавычки. Я просто понятия не имею, как их получить таким образом.
Спасибо!
1 ответ
Это может быть немного громоздко, но вы можете попробовать несколько простых выражений в objective c
просто чтобы увидеть, так ли это на самом деле
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\"" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *json = [regex stringByReplacingMatchesInString:jsonPerson options:0 range:NSMakeRange(0, [jsonPerson length]) withTemplate:@"'"];
Там могут быть некоторые ошибки, потому что я не запускал код.