AFNetworking 序列化正斜杠使 JSON 有效负载无效

     2023-02-24     196

关键词:

【中文标题】AFNetworking 序列化正斜杠使 JSON 有效负载无效【英文标题】:AFNetworking serializes forward slash making the JSON payload invalid 【发布时间】:2015-10-09 03:03:55 【问题描述】:

我正在使用AFNetworking 2.0。

AFNetworkingAFHTTPRequestOperationManager 对象有一个API:

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

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

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

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

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

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

问。如何解决这个问题?

【问题讨论】:

不确定我是否理解这个问题:您是说您正在尝试发送“buttonActionParam”:“/catalog/special/international-calling”,而这正是发送的内容AFNetworking,有什么问题? 编辑了我的问题。不得不放转义字符。 :) 来自NSJSONSerializationNSData 与您在服务器端看到的不太一样——它在我的十六进制编辑器中显示"buttonActionParam":"\/catalog\/special\/international-calling"。我想知道这是否是字符编码问题 - 看起来服务器出于某种原因坚持了额外的转义 \。 @RichTolley 我编辑了来自 NSJSONSerialization 的内容。我正在寻找 "buttonActionParam":"/catalog/special/international-calling" 而不是 "buttonActionParam":"\/catalog\/special\/international-calling" 【参考方案1】:

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

有3种可能的解决方案:

    让您的服务器意识到字符串可能被转义。一般来说,这是最好的解决方案。

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

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

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

【讨论】:

#2 仅在 AFNetworking 之后使用 SBJson 时才有效。 #3 我在发布之前尝试过。不工作。我会尝试#1。 @DeborshiSaha 不,主要是关于如何设置序列化程序。如果你不让 AFNetworking 使用它的默认请求序列化器(它使用NSJSONSerialization),那么你没有问题。

AFNetworking JSON 序列化问题

】AFNetworkingJSON序列化问题【英文标题】:AFNetworkingJSONserializationproblems【发布时间】:2013-11-2203:34:49【问题描述】:我正在使用AFNetworking发送JSON(最初存储在NSDictionary中)。我的对象看起来像这样(取自文档评论):/***Sendsacreat... 查看详情

使用 afnetworking 的 JSON 序列化

】使用afnetworking的JSON序列化【英文标题】:JSONSerializationusingafnetworking【发布时间】:2015-01-2020:45:48【问题描述】:我在服务器中接收json的方式有问题。有学生数组(字典)将其包装在字典中:varstudents:[[String:String]]=[]students.appe... 查看详情

用正斜杠转义 json 字符串?

】用正斜杠转义json字符串?【英文标题】:escapingjsonstringwithaforwardslash?【发布时间】:2010-08-0510:39:44【问题描述】:我在将json字符串传递回php脚本进行处理时遇到问题。我有一个使用包含/的dojo.toJson()创建的json字符串,如下所... 查看详情

来自熊猫数据框的 json 文件中的正斜杠

】来自熊猫数据框的json文件中的正斜杠【英文标题】:Forwardslashinjsonfilefrompandasdataframe【发布时间】:2017-09-1019:21:55【问题描述】:我是json的完全新手,感谢任何帮助。我正在尝试将数据框转换为json文件。importpandasaspddf=pd.DataFr... 查看详情

使用 AFNetworking 2.5 将 JSON 序列化为 NSArray

】使用AFNetworking2.5将JSON序列化为NSArray【英文标题】:SerializingJSONintoanNSArraywithAFNetworking2.5【发布时间】:2014-12-0401:22:39【问题描述】:到目前为止,使用AFNetworking2.5来填充一个数组,其中填充了与last.fmAPI相关的热门曲目的艺术... 查看详情

使用 JSONKit 和 AFNetworking 使 url 查询成为一个复杂的 JSON 对象

】使用JSONKit和AFNetworking使url查询成为一个复杂的JSON对象【英文标题】:UseJSONKitandAFNetworkingtomakeurlqueryacomplexJSONobject【发布时间】:2014-04-0306:04:24【问题描述】:我正在使用AFNetworking进行登录,url格式是这样的:http://xxx/mobile?func... 查看详情

为啥从 django rest 框架返回的 JSON 在响应中有正斜杠?

】为啥从djangorest框架返回的JSON在响应中有正斜杠?【英文标题】:WhydoesJSONreturnedfromthedjangorestframeworkhaveforwardslashesintheresponse?为什么从djangorest框架返回的JSON在响应中有正斜杠?【发布时间】:2015-03-3017:33:32【问题描述】:我的... 查看详情

具有反斜杠的 Json 序列化数据

】具有反斜杠的Json序列化数据【英文标题】:Jsonserializeddatahavingbackslashes【发布时间】:2016-11-3005:35:03【问题描述】:我正在使用rest_framework.response方法来发送多个django模型的对象。但是,响应包含带引号的反斜杠。这是我的看... 查看详情

怎么过滤json数组中反斜杠“”,反序列化

 原因就是json数组被序列化了两次,反序列化回来就可以。 JSON数组jsonarray是[object,object]的形式;  序列化即:JSON.stringify(jsonarry)就变成了[{"id","2"},{"name","tt"}]这种形式。  反序列化即:JSON.parse(jsonarry)又变成... 查看详情

AFNetworking 向 JSON 响应键添加引号

】AFNetworking向JSON响应键添加引号【英文标题】:AFNetworkingaddingquotestoJSONresponsekeys【发布时间】:2014-01-1616:26:31【问题描述】:我有一个奇怪的错误,我无法理解。我正在构建一个使用远程JSONAPI进行通信的应用程序。我正在使用A... 查看详情

为啥json字符串当中会出现反斜杠?

...:执行结果:分析:1)首先我们组装一个map2)将map进行序列化进行输出,发现没有问题3)将map进行序列化,再次进行序列化,发现反斜杠出现了总结:其实就是我们对map或者对象进行了两次的序列化。说白了就是进行了两次的... 查看详情

AFNetworking 2.0 和响应序列化选项

】AFNetworking2.0和响应序列化选项【英文标题】:AFNetworking2.0andResponseSerializationOptions【发布时间】:2013-10-2819:36:20【问题描述】:一旦我触发对JSON资源的请求,我就会得到以下信息:Theoperationcouldn’tbecompleted.(Cocoaerror3840.)"(JSONtext... 查看详情

前后端json序列化反序列化反斜杠无法正常传递(代码片段)

斜杠无法传递问题:操作:分析:解决:四个转义字符问题:我希望传递给前端以下数据,同时反斜杠\\保留不被转义test.map="ab\\-Test":"value"操作://jsonString:="ab\\-Test":"valu 查看详情

JSON 中的 XML 序列化,无需过度转义

】JSON中的XML序列化,无需过度转义【英文标题】:XMLserializationinJSONwithoutexcessiveescaping【发布时间】:2019-10-1604:47:35【问题描述】:如何避免JSON中XML的单线和双引号转义?鉴于此solidus字符(又名正斜杠,/)可以,但不必,是在J... 查看详情

AFNewtorking 中的 JSON 序列化失败

...布时间】:2014-06-2218:05:33【问题描述】:我正在尝试使用AFNetworking执行从Web服务返回JSON字符串的GET请求,但我从AFNetworking1.3.3收到以下错误@"JSON文本没有以数组或对象开头,并且允许未设置片段的选项。"这是我的JSON,它是一个... 查看详情

自动添加的 URL 末尾的 AFNetworking 斜杠

】自动添加的URL末尾的AFNetworking斜杠【英文标题】:AFNetworkingslashattheendofURLthataddedautomatically【发布时间】:2013-11-2613:49:27【问题描述】:AFNetworkingv.1.x的下一个问题可能与2.x相同#defineLOGIN_URL@"http://myserverr.com/login"NSURL*url=[NSURLURLWi... 查看详情

AFNetworking 无法序列化压缩响应(响应对象为零)

】AFNetworking无法序列化压缩响应(响应对象为零)【英文标题】:AFNetworkingunabletoserializegzippedresponse(responseobjectisnil)【发布时间】:2015-05-2608:31:10【问题描述】:我正在使用AFNetworking下载一个.gzip文件,该文件在未压缩时应返回... 查看详情

序列化包含转义(反斜杠和双引号)的 JSON 字符串 Swift 返回格式错误的对象

】序列化包含转义(反斜杠和双引号)的JSON字符串Swift返回格式错误的对象【英文标题】:SerializeJSONstringthatcontainsescaped(backslashanddoublequote)SwiftreturnBadlyformedobject【发布时间】:2018-10-2604:36:56【问题描述】:我有来自后端的响应... 查看详情