Search code examples
iosjsonswiftalamofire

swift Unescaped control character


I'm trying to get a json from a server and deserialize it, but I try probelas with unescaped control characters. My code is as follows ...

let urlFinal = "http://000.0000.000.000:8080"
        let jsonUrl = urlFinal
        let session = NSURLSession.sharedSession()
        let shotsUrl = NSURL(string: jsonUrl)

        let task = session.dataTaskWithURL(shotsUrl!) {data, response, error in
            guard data != nil else {
                falha()
                return
            }

            //let json = JSON(data: data!)
            //print(json["ServicoCliente"][0]["id"])

            do {
                let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers )
                let J = jsonData as! NSDictionary
                print(jsonData)
                let us = J["ServicoCliente"]
                print(us)
                dispatch_async(dispatch_get_main_queue(),{
                    sucesso()
                });
            } catch _ {
                falha()
            }
        }
        task.resume()

and I also tried this using Alamofire 3.0:

Alamofire.request(.GET, "http://000.000.000.000/", parameters: nil)
    .responseJSON { response in
        debugPrint(response)     // prints detailed description of all response properties

        print(response.request)  // original URL request
        print(response.response) // URL response
        print(response.data)     // server data
        print(response.result)   // result of response serialization

        if let JSON = response.result.value {
            print("JSON: \(JSON)")
        }
}

And get this error:

Unescaped control character around character 263

How can I remove characters without escape?

I use X-Code 7.3.1 and Swift 2.3

UPDATE: Json

{"ServicoCliente":[{"id":"195","cliente":"247","enderecoFavoritos":"48","servicoProfissional":"194","ind_estado_cliente":"A","ind_estado_profissional":"","profissional_id":"240","profissional_nome":"PetMax","servicotipo_nome":"Petshop","servicosubtipo_nome":"Tosa ","dta_inc_alt":"2016-11-05 22:56:19.333","ind_finalizado":"N"}]}

Solution

  • To fix this, you must convert the data for string, remove characters and then convert to dataonly then deserialize

    let urlFinal = "http://000.0000.000.000:8080"
    let jsonUrl = urlFinal
    let session = NSURLSession.sharedSession()
    let shotsUrl = NSURL(string: jsonUrl)
    
    let task = session.dataTaskWithURL(shotsUrl!) {data, response, error in
    guard data != nil else {
        falha()
        return
    }
    
    var dataToString = String(data: data!, encoding: NSUTF8StringEncoding)
    dataToString = stringByRemovingControlCharacters2(dataToString!)
    let ndata = dataToString!.dataUsingEncoding(NSUTF8StringEncoding)
    
    do {
        let jsonData = try NSJSONSerialization.JSONObjectWithData(ndata!, options: NSJSONReadingOptions.MutableContainers )
        let J = jsonData as! NSDictionary
        print(jsonData)
        let us = J["ServicoCliente"]
        print(us)
        dispatch_async(dispatch_get_main_queue(),{
            sucesso()
        });
    } catch _ {
        falha()
    }
    }
    task.resume()
    

    and add the function

    func stringByRemovingControlCharacters2(string: String) -> String {
    let controlChars = NSCharacterSet.controlCharacterSet()
    var range = string.rangeOfCharacterFromSet(controlChars)
    var mutable = string
    while let removeRange = range {
        mutable.removeRange(removeRange)
        range = mutable.rangeOfCharacterFromSet(controlChars)
    }
    
    return mutable
    }