ios - AFNetworking 序列化正斜杠,使 JSON 负载无效

标签 ios objective-c json afnetworking-2

我正在使用 AFNetworking 2.0。

AFNetworking 中,AFHTTPRequestOperationManager 对象有一个 API:

(AFHTTPRequestOperation *)POST:(NSString *)URLString
                    parameters:(id)parameters
                       success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure

它接受 NSDictionary 作为我们希望“POST”到服务器的 JSON 负载的参数。在我的有效载荷中,我有以下键值对:

"buttonActionParam":"/catalog/special/international-calling"

发布此负载服务器返回无效的 JSON。查看服务器端的有效载荷,我意识到 AFNetworking 实际上正在发送:

"buttonActionParam":"\/catalog\/special\/international-calling".

我知道 AFNetworking 库使用 NSJSONSerialization 的类方法 -dataWithJSONObject:,这导致了这个。我的问题是:

问。如何解决这个问题?

最佳答案

这是已知问题。它实际上按设计运行(参见 https://stackoverflow.com/a/20448342/669586)。

有3种可能的解决方案:

  1. 让您的服务器知道字符串可以被转义的可能性。一般来说,这是最好的解决方案。

  2. 使用不同的 JSON 编码器(例如 SBJson)并将对象编码为 NSData,而不是使用 AFNetworking 默认序列化器。

  3. 使用 NSJSONSerialization 进行编码,然后将结果数据转换为 NSString(使用 NSUTF8StringEncoding),对其进行清理并将其转换回来到 NSData。同样,您必须在将对象提供给 AFNetworking 之前执行此操作。

实现 2 或 3 的最佳方法是在 AFHTTPSessionManager 实例上设置自定义 requestSerializer。例如,参见 this answer有关实现 3 的示例(注意它是在 Swift 中)。

关于ios - AFNetworking 序列化正斜杠,使 JSON 负载无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33029216/

相关文章:

objective-c - 我可以有条件地禁用仅在第一响应者响应选择器时启用的 NSMenuItem 吗?

objective-c - 使用 nodeJS 和 Objective-C 的非对称公钥/私钥加密 RSA

python - 为什么 Python json.dumps 在混合 utf-8 和 unicode 字符串上失败?

ios - swift ios 通过循环为多个 subview 添加约束

ios - 使用 OR 运算符的简化形式?

ios - 主详细信息项目模板和 canDisplayBannerAds 不起作用

iphone - iOS项目目录组织

javascript - 使用 Javascript 在 Rails 应用程序中通过 POST 发送富文本

java - 使用 JSON 和 AJAX 发送和检索数据

ios - 当我更改时间间隔的值时,如何更新我的 NSTimer