迅速未转移的控制角色

时间:2016-11-06 23:08:20

标签: ios json swift alamofire

我正在尝试从服务器获取json并对其进行反序列化,但我尝试使用未转义的控制字符探测。 我的代码如下......

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()

我也尝试使用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)")
        }
}

并收到此错误:

  

角色263周围未转义的控制角色

如何在不逃避的情况下删除字符?

我使用X-Code 7.3.1和Swift 2.3

更新: 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"}]}

2 个答案:

答案 0 :(得分:3)

要解决此问题,您必须转换字符串数据,删除字符,然后转换为dataonly然后反序列化

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()

并添加功能

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
}

答案 1 :(得分:0)

雨燕5

func string(byRemovingControlCharacters inputString: String) -> String {
    let controlChars = CharacterSet.controlCharacters
    var range = (inputString as NSString).rangeOfCharacter(from: controlChars)
    if range.location != NSNotFound {
        var mutable = inputString
        while range.location != NSNotFound {
            if let subRange = Range<String.Index>(range, in: mutable) { mutable.removeSubrange(subRange) }
            range = (mutable as NSString).rangeOfCharacter(from: controlChars)
        }
        return mutable
    }
    return inputString
}