我正在调用SOAP Web服务,最终响应包含一个JSON对象。 Web服务以十六进制字符串形式返回数据,我使用xml解析器获取正确的xml标记以获取JSON响应。代码工作正常,除非JSON包含大量数据。在大JSON的情况下,代码可以正常工作到POINT 1,十六进制字符串,当转换为UTF8String时,显示完整的xml,其中嵌入了完整的JSON。但是在解析之后,在POINT 2,我得到了不完整的JSON。日志输出显示一些JSON数据,没有关闭标记和大多数数据。当JSON响应很小时,这不会发生。 我认为JSON足够小以适应String变量,(有人可以确认swift中的字符串大小限制吗?) 另外我应该提到相同的Web服务,解析在Android版本的应用程序中工作正常。相关代码和示例XML粘贴在下面。
func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
mutableData.appendData(data)
}
func connectionDidFinishLoading(connection: NSURLConnection!) {
println(mutableData) // ***********POINT 1: data is in Hex string format but otherwise complete upto this point
indicator.stopAnimating()
var xmlParser = NSXMLParser(data: mutableData)
xmlParser.delegate = self
xmlParser.parse()
xmlParser.shouldResolveExternalEntities = true
}
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
currentElementName = elementName
}
func parser(parser: NSXMLParser, foundCharacters string: String?) {
//************ POINT 2: This is where it goes wrong, the below log output shows an incomplete string, hence incomplete JSON and JSON parser fails
println(string)
if currentElementName == methodname+"Result" {
parseMyJSON(string!)
}
else if currentElementName == methodname2+"Result"
{
parseMyJSON2(string!)
}
}
以下是来自网络服务的示例回复。
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><CustomerInformationResponse xmlns="http://tempuri.org/"><CustomerInformationResult>this tag contains the JSON I am trying to parse</CustomerInformationResult></CustomerInformationResponse></soap:Body></soap:Envelope>