передача JSON из ASIHTTPRequest в Django - PullRequest
0 голосов
/ 17 мая 2011

Я исчерпал другие темы, поэтому я публикую этот вопрос здесь. Прошу прощения за любые ошибки новичка, которые я сделал по пути. Я много читал и думаю, что запутался.

Цель: Я пытаюсь передать данные из формы в 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- С сторона, а скорее на стороне Джанго.

Вот что я пробовал до сих пор:

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 Ответ

0 голосов
/ 17 мая 2011

Это может быть немного громоздко, но вы можете попробовать несколько простых регулярных выражений в 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:@"'"];

Могут быть некоторые ошибки, потому что я не запустил код.

...