ios 传递JSON串过去 前面多了个等号

Posted pp/ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios 传递JSON串过去 前面多了个等号相关的知识,希望对你有一定的参考价值。

先说下我的问题

后台让我这边把请求的参数弄成一个实体转化成 json 串放body里传给他,当然header也有设置,提前设置好了,

但是后来了解 所谓的把实体转成json串的本质就是先把实体用runtime 转化为字典 或者数组 然后用

  NSData *jsonData = [NSJSONSerialization dataWithJSONObject:model options:NSJSONWritingPrettyPrinted error:nil];

    //

    NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

上面两行代码解析转换,得到的确实好的json串。

但是问题出现了,每次传递之前输出log json串是没问题的,但是到服务器那边,json串前多了个等号,

=%3C7b0a2020%2022706173%2073776f72%206422203a%2020223132%2033343536%20222c0a20%2020227573%2065724e61%206d652220%203a202231%2033323431%2035383235%203233220a%207d%3E

后台解析不了。

 

后来查找AFN底层 找到原因了 

AFURLRequestSerialization.m 508行  

query = AFQueryStringFromParameters(parameters); 能清晰的输出 把我们的json 做了改变(为什么会变)。

解决办法 

AFHTTPSessionManager 267行方法 里加入

 [request setHTTPBody:parameters]; (不知道为什么会这样),

但是到现在为止 还是没通数据 又把前面的json串改成json流 也就是删除   NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

但是我用的是Ytknetwork 所以 我又改了

YTKNetworkAgent.m 167 行sessionTaskForRequest 进入响应的post (根据需要可以是get),也就是457行 

dataTaskWithHTTPMethod方法里加入

    [request setHTTPBody:parameters];这行代码

终于通了

以上是关于ios 传递JSON串过去 前面多了个等号的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 处理 微擎传递过去数据

原来过去的 Python 学了个寂寞,你离进阶还差这几步

.net MVC问题 后台控制器需要接受一个List<class>型的参数,用json如何传过去?

Java转JSON串的几种方式

前台发过去的数据为Content-Type:application/json,后台如何接收

jsonjsonp的定义和区别