【问题标题】:ASIFormDataRequest JSON encoding issuesASIFormDataRequest JSON 编码问题
【发布时间】:2011-06-02 04:54:26
【问题描述】:

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

但是,当我做一个 [请求 setPostValue:[userObj JSONString] forKey:@"user"];

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

{"password":"hello","name":"user","email":"user@foo.com"}

"{\"密码\":\"hello\",\"name\":\"user\",\"email\":\"user@foo.com\"}"

这最终会混淆 Rails,并抱怨无效的对象。我可以强制 ASIFormDataRequest 不转义引号吗?我知道这可能是 JSONString 本身的问题,但我无法在这里找到一个好的解决方案。

谢谢

【问题讨论】:

  • 这个问题解决了吗?我有同样的问题。

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


【解决方案1】:

这对我有用:

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];

【讨论】:

    【解决方案2】:

    混合 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 数据?

    【讨论】:

    • 我只是在做一个 puts params[:user].inspect。在上面的示例 sn-p 中,我仍然需要附加 {user=>JsonString} 才能工作。
    • 我不是 ruby​​ 专家(我更偏向于 iOS 方面)。我不认为 ASIFormDataRequest 正在添加引号,但您需要使用 wireshark 来确认。我认为引号的转义是由 Ruby 的检查方法完成的 - 文档说它会转义所有特殊字符。
    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多