【发布时间】:2016-11-21 00:20:00
【问题描述】:
在我的项目中,我需要在 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
})
在那个网络服务方法中我有打印参数。
Param = {
ESignData = "{\"EntNum\":\"47\",\"JobNo\":\"1737753\",\"ClientID\":\"100\",\"HospNo\":\"1\",\"QAReason\":\"\",\"DoctorNo\":\"1694\",\"Action\":\"Sign\"}";
}
现在我知道这在 iOS 中很明显,因为字符串中的 "。现在的问题是有很多 API 在 android 应用程序中工作,并且 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\"}"
所以它表明它在我们的字典中。所有的 " 都由 \ 连接。
【问题讨论】:
-
我不知道你是如何在服务器端打印参数的,但是看到封闭的
"s,看似两个字符序列\"将代表一个字符@987654333 @。许多调试输出使用这种“类似字符串文字”的符号。我相信你的参数已经成功发送到服务器了。 -
@OOPer 这是在我们这边而不是在服务器端打印,我们只是收到失败响应,因为他们无法获取所需的参数。
-
那么,原因不是反斜杠。如果您的
newParam对 API 有效,请检查 API 参考。 -
让我编辑问题。
-
您在帖子的
Params =部分显示的代码采用NSDictionary 的类似plist 的格式进行格式化。那些 \ 不会发送到服务器。
标签: ios json swift web-services