Ios 发生JSON解析错误,详细信息如下:

Ios 发生JSON解析错误,详细信息如下:,ios,objective-c,swift,Ios,Objective C,Swift,代码 输出 发生JSON解析错误,详细信息如下: 错误域=NSCOCAERRORDOMAIN Code=3840字符0周围的无效值。UserInfo={NSDebugDescription=字符0周围的值无效。} 完成了 我得到错误-字符0周围的值无效。我希望获得具有所需键和值的正确格式的数据,请任何人帮助我解决此问题。您的JSON响应已损坏。用于验证它 把它从 {\"result\":[{\"stateId\":3871,\"stateName\":\"Aberdeenshire\"} 到

代码

输出

发生JSON解析错误,详细信息如下: 错误域=NSCOCAERRORDOMAIN Code=3840字符0周围的无效值。UserInfo={NSDebugDescription=字符0周围的值无效。} 完成了


我得到错误-字符0周围的值无效。我希望获得具有所需键和值的正确格式的数据,请任何人帮助我解决此问题。

您的JSON响应已损坏。用于验证它

把它从

{\"result\":[{\"stateId\":3871,\"stateName\":\"Aberdeenshire\"}


请注意删除了反斜杠。

看起来您的响应中包含字符串,请尝试类似的操作

do {
    let parsed = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String: AnyObject]
    let responseStr = parsed["d"] as! String
    let correctData = responseStr.dataUsingEncoding(NSUTF8StringEncoding)
    let responseDic = try NSJSONSerialization.JSONObjectWithData(correctData, options: NSJSONReadingOptions.AllowFragments) as! [String: AnyObject]
    print(responseDic)
}
catch let error as NSError {
    print("A JSON parsing error occurred, here are the details:\n \(error)")
}
试试这个

if let result:String = parsed["d"]! {
    let result = convertStringToDictionary(text: result)
    print("Converted result = \(result)")
}

//SWIFT 3
func convertStringToDictionary(text: String) -> [String:AnyObject]? {
    if let data = text.data(using: String.Encoding.utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String:AnyObject]
        } catch let error as NSError {
            print(error)
        }
    }
    return nil
}

//SWIFT 2
func convertStringToDictionary(text: String) -> [String:AnyObject]? {
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
        do {
            return try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject]
        } catch let error as NSError {
            print(error)
        }
    }
    return nil
}

您可以粘贴restclient响应吗?您可以检查json数据是否有效..在其自身初始值内使用的变量->对于变量“correctData”,行上的连续语句必须用“:”分隔,对于行->捕获let错误为NSError{抱歉,添加了错误{括号之后,请删除它,检查我编辑的答案。获取错误->在第行使用未解析标识符“NSUTF8StringEncoding”->让correctData=responseStr.dataUsingEncodi‌​ngNSUTF8StringEncodi‌​是的,我甚至遇到了错误,所以我通过不同的代码改变了逻辑。并且解决了你所说的错误,现在代码没有问题了。
{
    "result": {
        "stateId": 3871,
        "stateName": "Aberdeenshire"
    }
}
do {
    let parsed = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String: AnyObject]
    let responseStr = parsed["d"] as! String
    let correctData = responseStr.dataUsingEncoding(NSUTF8StringEncoding)
    let responseDic = try NSJSONSerialization.JSONObjectWithData(correctData, options: NSJSONReadingOptions.AllowFragments) as! [String: AnyObject]
    print(responseDic)
}
catch let error as NSError {
    print("A JSON parsing error occurred, here are the details:\n \(error)")
}
if let result:String = parsed["d"]! {
    let result = convertStringToDictionary(text: result)
    print("Converted result = \(result)")
}

//SWIFT 3
func convertStringToDictionary(text: String) -> [String:AnyObject]? {
    if let data = text.data(using: String.Encoding.utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String:AnyObject]
        } catch let error as NSError {
            print(error)
        }
    }
    return nil
}

//SWIFT 2
func convertStringToDictionary(text: String) -> [String:AnyObject]? {
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
        do {
            return try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject]
        } catch let error as NSError {
            print(error)
        }
    }
    return nil
}