在我的项目中,我需要在Web服务API调用中发送JSON对象。我已经从数组中转换了JSON。
do {
let theJSONData = try NSJSONSerialization.dataWithJSONObject(
param ,
options: NSJSONWritingOptions(rawValue: 0))
var theJSONText : String = String(data: theJSONData,
encoding: NSASCIIStringEncoding)!
print(theJSONText)
theJSONText = theJSONText.stringByReplacingOccurrencesOfString("\\", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
print(theJSONText)
let newParam = ["ESignData":theJSONText]
} catch let error as NSError {
print(error)
}
正确打印字符串
{"EntNum":"47","JobNo":"1737753","ClientID":"100","HospNo":"1","QAReason":"","DoctorNo":"1694","Action":"Sign"}
{"EntNum":"47","JobNo":"1737753","ClientID":"100","HospNo":"1","QAReason":"","DoctorNo":"1694","Action":"Sign"}
现在,当我尝试在API调用中发送此newParam
字典时,它在JSON字符串的字符串参数中包含“\”。
WebService.PostURL(mainLink, methodname: ESIGNTHISDOC, param: newParam, userName: AUTH_USERNAME, password: AUTH_PWD, CompletionHandler: { (success, response) in
})
在那个Web服务方法中,我有打印参数。
Param = {
ESignData = "{\"EntNum\":\"47\",\"JobNo\":\"1737753\",\"ClientID\":\"100\",\"HospNo\":\"1\",\"QAReason\":\"\",\"DoctorNo\":\"1694\",\"Action\":\"Sign\"}";
}
现在我知道这在iOS中是显而易见的,因为“在字符串中。现在问题是在Android应用程序中有很多API工作,并且API开发人员不想根据我们更新他的代码。
我知道发生此问题是因为在字典中添加JSON字符串作为参数。但是我没有正确的理由,所以如果有任何证据也有助于我说服他。
在iOS中没有反斜杠转换JSON字符串的任何解决方案?如果可能的话,我需要从我身边修好。任何帮助将不胜感激。
编辑:
在服务器端,它需要像
ESignData = {"EntNum":"47","JobNo":"1737753","ClientID":"100","HospNo":"1","QAReason":"","DoctorNo":"1694","Action":"Sign"}
如果我在POSTMAN中传递此参数而不是成功消息。但不是我们的对象中带有“\”。
编辑2:
现在打印newParam
字典:
print(newParam)
print("-------------------------")
print(newParam["ESignData"])
并记录:
["ESignData": "{\"EntNum\":\"47\",\"JobNo\":\"1737754\",\"ClientID\":\"100\",\"HospNo\":\"1\",\"QAReason\":\"\",\"DoctorNo\":\"1694\",\"Action\":\"Sign\"}"]
-------------------------
Optional("{\"EntNum\":\"47\",\"JobNo\":\"1737754\",\"ClientID\":\"100\",\"HospNo\":\"1\",\"QAReason\":\"\",\"DoctorNo\":\"1694\",\"Action\":\"Sign\"}")
通过调试:
Printing description of newParam:
▿ 1 elements
▿ [0] : 2 elements
- .0 : "ESignData"
- .1 : "{\"EntNum\":\"47\",\"JobNo\":\"1737754\",\"ClientID\":\"100\",\"HospNo\":\"1\",\"QAReason\":\"\",\"DoctorNo\":\"1694\",\"Action\":\"Sign\"}"
所以它表明它在我们的字典中。所有“都加入了\。
答案 0 :(得分:1)
我今天遇到了这个问题。对我来说,似乎任何NSURLRequest
的默认编码都是字符串。因此,在创建字典请求和解析它的服务器之间,会出现反斜杠,服务器的负载会出现问题。
我通过设置内容类型标题明确声明我的有效负载是JSON来解决问题。
[authRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
现在,当我从字典创建JSON数据时,不会出现反斜杠,服务器也能正确解析所有内容。
以下代码段完整性:
NSMutableURLRequest *authRequest = [[[NSURLRequest alloc] initWithURL:authURL] mutableCopy];
[authRequest setHTTPMethod:@"POST"];
NSURLSession *session = [NSURLSession sharedSession];
[authRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSDictionary *bodyDictionary = @{@"User_Name": user, @"Password_Hash": password};
if ([NSJSONSerialization isValidJSONObject:bodyDictionary]) {
NSError *error;
NSData *bodyData = [NSJSONSerialization dataWithJSONObject:bodyDictionary options:0 error:&error];
if (!error) {
[authRequest setHTTPBody:bodyData];
} else {
NSLog(@"Unable to convert to JSON DATA %@", error.localizedDescription);
}
}