Deb*_*aha 9 json objective-c ios afnetworking-2
我正在使用AFNetworking2.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
Run Code Online (Sandbox Code Playgroud)
它接受NSDictionary作为我们希望"POST"到服务器的JSON Payload的params.在我的有效载荷中,我有以下键值对:
"buttonActionParam":"/catalog/special/international-calling"
发布此有效内容服务器会返回无效的JSON.查看服务器端的有效负载,我意识到AFNetworking实际上正在发送:
"buttonActionParam":"\/catalog\/special\/international-calling".
我知道AFNetworking库使用NSJSONSerialization的是类方法-dataWithJSONObject:,这会导致这种情况.我的问题是:
问:如何解决这个问题?
这是已知问题。它实际上按照设计运行(请参阅/sf/answers/1431383971/)。
有3种可能的解决方案:
让您的服务器意识到字符串可能被转义的可能性。一般来说,这是最好的解决方案。
使用不同的 JSON 编码器(例如SBJson)并对对象进行编码,NSData而不是使用 AFNetworking 默认序列化器。
使用 进行编码NSJSONSerialization,然后将结果数据转换为NSString(使用NSUTF8StringEncoding),对其进行清理并将其转换回NSData. 同样,您必须在将对象提供给 AFNetworking 之前执行此操作。
实现 2 或 3 的最佳方法是在实例requestSerializer上设置自定义AFHTTPSessionManager。例如,请参阅此答案以获取实现 3 的示例(注意它是在 Swift 中)。
| 归档时间: |
|
| 查看次数: |
7605 次 |
| 最近记录: |