gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:59:36 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com