我的JSON无法在某些字符串值上解析?

时间:2019-06-27 05:02:18

标签: ios json xml

我正在执行xml解析,并在找到的字符委托方法上获取了字符串值,并进行了JSON序列化以获取数据。现在对于某些搜索值字符串已解析良好,并且我正在获取JSON数据,但有时我会遇到错误,例如字符周围的字符串未终止或字符周围的字符串无效。请对此进行帮助。预先感谢。

  var currentParsingElement:String = ""
    var getLocation:String = ""

 //XML Get Loaction
        let LocationMessage = "<?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:ns1='http://tempuri.org/'><SOAP-ENV:Body><ns1:GetBROMCoordinateByLatLogRad><ns1:latitude>\(place.coordinate.latitude)</ns1:latitude><ns1:logitude>\(place.coordinate.longitude)</ns1:logitude><ns1:radius>500</ns1:radius></ns1:GetBROMCoordinateByLatLogRad></SOAP-ENV:Body></SOAP-ENV:Envelope>"


        let LocationurlString = "http://XYZ/ZZZWebService/API/XXXApiService.svc"

        let LocationmsgLength = String(LocationMessage.count)
        let LocationUrl = NSURL(string: LocationurlString)!

        var LocationRequest = URLRequest(url: LocationUrl as URL)
        LocationRequest.addValue("text/xml", forHTTPHeaderField: "Content-Type")
        LocationRequest.addValue("http://tempuri.org/XXXApiService/GetBROMCoordinateByLatLogRad", forHTTPHeaderField: "Soapaction")
        LocationRequest.addValue(LocationmsgLength, forHTTPHeaderField: "Content-Length")

        LocationRequest.httpMethod = "POST"
        LocationRequest.httpBody = LocationMessage.data(using: .utf8)

        let Locationsession = URLSession.shared
        let Locationtask = Locationsession.dataTask(with: LocationRequest as URLRequest) { (data, response, error) in
            guard let Locationresponse = data,
                error == nil else {
                    print(error?.localizedDescription ?? "Response Error")
                    return }

            print("Track Response: \(String(describing: response))")


            let Locationparser = XMLParser(data: Locationresponse)
            Locationparser.delegate = self
            Locationparser.parse()
        }
        Locationtask.resume()

//代理XML

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
        currentParsingElement = elementName
        if elementName == "GetBROMCoordinateByLatLogRadResponse" {
            print("Started parsing...")
        }
    }
 func parser(_ parser: XMLParser, foundCharacters string: String) {
         let foundedChar = string.trimmingCharacters(in:NSCharacterSet.whitespacesAndNewlines)

        if (!foundedChar.isEmpty) {
            if currentParsingElement == "GetBROMCoordinateByLatLogRadResult" {
                getLocation += foundedChar
                print("Location is",getLocation)

                let jsonData = getLocation.data(using: .utf8)

                do{

                    let jsonResponse = try JSONSerialization.jsonObject(with: jsonData!, options: .allowFragments) 
                    print("JSON Data is", jsonResponse) //Response result

                    guard let jsonArray = jsonResponse as? [[String: Any]]
                        else {
                            return
                    }

                    print("JSON Array is", jsonArray)
                    for outletFinderresult in jsonArray {

                        let outletFinderData = outletFinder()

            outletFinderData.BranchName = outletFinderresult["BranchName"] as! String
            print("Branch Name", outletFinderData.BranchName)
            outletFinderData.BranchType = outletFinderresult["BranchType"] as! String
            print("Branch Type", outletFinderData.BranchType)
            outletFinderData.BranchContactNo = outletFinderresult["BranchContactNo"] as! String
            print("Branch ContactNo", outletFinderData.BranchContactNo)

            let getOperatioHours = outletFinderresult["OperationHours"] as! String
            let removeN = String(getOperatioHours.filter { !"\n".contains($0) })
            outletFinderData.OperationHours = removeN
            print("Operation Hours", outletFinderData.OperationHours)
            print("Address", outletFinderData.Address)

            outletFinderData.Latitude = (outletFinderresult["Latitude"] as! NSString).doubleValue
            print("Latitude", outletFinderData.Latitude)
            outletFinderData.Longitude = (outletFinderresult["Longitude"] as! NSString).doubleValue
            print("Longitude", outletFinderData.Longitude)

            self.trackOutletFinder.append(outletFinderData)

                    }
                    DispatchQueue.main.async {
                        self.outletCollectionView.reloadData()
                     //  elf.outletCollectionView.collectionViewLayout.invalidateLayout()

                    }
                } catch let parsingError {
                    print("Error", parsingError)
                }
  func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        if elementName == "GetBROMCoordinateByLatLogRadResponse" {
            print("Ended parsing...")
        }

    }

//控制台错误

Location is [  {    "$id": "1",    "StateName": "SELANGOR",    "StateCode": "B",    "BusinessType": [],    "BranchType": "Pejabat POS",    "BranchName": "Pejabat POS KLIA Terminal",    "BranchCode": "1070",    "BranchAddress1": "Lot 13A,",    "BranchAddress2": "Bangunan Terminal Utama,",    "BranchAddress3": "",    "Postcode": "64000",    "City": "KLIA",    "Latitude": "2.753897",    "Longitude": "101.705483",    "BranchContactNo": "03-87873871",    "BranchManagerName": "Mahiza Bt Manap",    "OperationHours": "Isnin - Jumaat8.30pg - 5.30ptgSabtu8.30pg - 1.00ptg"  },  {    "$id": "2",    "StateName": "SELANGOR",    "StateCode": "B",    "BusinessType": [],    "BranchType": "HUB Antarabangsa",    "BranchName": "HUB Parcel Antarabangsa KLIA",    "BranchCode": "6100",    "BranchAddress1": "Pos Malayasia Mel
Error Error Domain=NSCocoaErrorDomain Code=3840 "Unterminated string around character 783." UserInfo={NSDebugDescription=Unterminated string around character 783.}
Location is &
Error Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}
Location is Kurier",    "BranchAddress2": "Jalan Klia S1,",    "BranchAddress3": "Kuala Lumpur International Airport,",    "Postcode": "64000",    "City": "Sepang",    "Latitude": "2.737011",    "Longitude": "101.722267",    "BranchContactNo": null,    "BranchManagerName": "Tiada Maklumat",    "OperationHours": ""  }]
Error Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}

0 个答案:

没有答案