ASIFormDataRequest JSON编码问题

时间:2011-06-02 04:54:26

标签: json ruby-on-rails-3 asihttprequest

我似乎遇到了一个我无法弄清楚的琐事问题。我正在使用ASIFormDataRequest与我的Ruby on Rails应用程序进行交互。我有一个接受User对象的REST API。我正在使用JSONKit从NSDictionary获取JSONString。

然而,当我做的时候 [request setPostValue:[userObj JSONString] forKey:@“user”];

服务器端的请求最终会转义引号。基本上,

{ “密码”: “你好”, “姓名”: “用户”, “电子邮件”: “user@foo.com”}

TO

“{\” 密码\ “:\” 你好\ “\ ”名称\“:\ ”用户\“ \ ”电子邮件\“:\ ”user@foo.com \“}”

这最终导致混乱的铁轨并且它抱怨无效的对象。我可以强制ASIFormDataRequest不要逃避引号吗?我知道这可能是JSONString本身的一个问题,但我无法在这里找到一个好的解决方案。

由于

2 个答案:

答案 0 :(得分:2)

这对我有用:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
NSDictionary* inner = [[NSDictionary alloc] initWithObjectsAndKeys:username, @"login",password, @"password", nil];
NSDictionary* user = [[NSDictionary alloc] initWithObjectsAndKeys:inner, @"user", nil];
NSMutableData *requestBody = [[NSMutableData alloc] initWithData:[[user JSONString] dataUsingEncoding:NSUTF8StringEncoding]];

[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request setRequestMethod:@"POST"];
[request setPostBody:requestBody];
[request startAsynchronous];

答案 1 :(得分:0)

将ASIFormDataRequest和JSON混合起来并不常见 - 通常人们会以HTML格式数据格式 编码JSON格式的内容。不是两个!

你能考虑在这种情况下使用纯JSON吗?它可能会让你的生活更轻松。基本上你会使用ASIHTTPRequest而不是ASIFormDataRequest,并将它设置为:

NSString *postData = [userObj JSONString];
[request addRequestHeader: @"Content-Type" value: @"application/json; charset=utf-8"];
[request appendPostData:[postData dataUsingEncoding:NSUTF8StringEncoding]];

除此之外,还不清楚为什么会出错 - 你能否使用wireshark这样的东西来捕获你发送的http请求的原始文本并将其添加到你的问题中?

如何从Ruby端的表单数据中提取JSON数据?