2011-05-17 89 views
0

我已经用尽了其他线程,所以我在这里发布这个问题。请原谅我一路上犯的任何新手错误。我一直在阅读很多,我觉得我很困惑。从ASIHTTPRequest传递JSON到django

目标: 我试图将数据从objective-c中的表单传递到我的django web服务。为了协助解决这个问题,我采用了ASIHTTPRequest类来促进信息传递。一旦发送到Web服务,我想将这些数据保存到我的sqlite3数据库。

步骤: 在目标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方面,而是在Django方面。

这里是我试过到目前为止:

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'']) 

...等看似牵强的变化略知一二。我保存了一个日志,并可以详细说明。我能找到的唯一希望就是最后一个例子。它看起来像是将整个字符串视为关键字,而不是按照我的预期分解每个字典对象和关键字。

我意识到这是非常基本的,我通常不会问,但这个问题让我特别难过。我还记得在python不会识别每个对象和关键字的双引号的地方,为了得到django喜欢的东西,每个都应该被单引号包围。我只是不知道如何让他们这样。

谢谢!

回答

0

这可能是一个有点麻烦,但您可以尝试在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:@"'"]; 

,因为我没有运行的代码可能有一些误差。

+0

你的代码是正确的 - 你的json字符串的NSLog会在对象和键上产生单引号。我仍然认为问题在于Django方面,以及我如何解析这些数据。不过谢谢你的回应。 – m4rk 2011-05-17 14:58:40

+0

好的,你也可以查看serser-side django的确切响应。如果它被“”包围,那么这可能是django不会将其视为JSON的原因。 – 2011-05-18 09:41:20

+0

我不知道python,所以我可能完全错了,但从我看到服务器端的POST响应是一个unicode字符串数组(两次u''),所以你可能想使用[request setPostValue :[jsonPerson dataUsingEncoding:NSUTF8StringEncoding] forKey:@“person”];而不是appendPostData来消除数组问题。然后使用post数组中的'person'字段。 – 2011-05-18 09:50:28