Alamofire .post api错误:代码= 3840“字符1周围的值无效

时间:2017-09-01 10:50:02

标签: ios json swift3 alamofire

将Alamofire用于.post api,api在postman中提供数据,但不在我的代码中。在代码下方发布,请指导我在这里做错了什么:

// API calling method:

parameters = [
        "Address" : "" as AnyObject,
        "Name" :  "" as AnyObject,
        "ServiceID" : "" as AnyObject,
        "Rating" :  "" as AnyObject,
        "Price" :  "" as AnyObject
    ]

    let headers: Dictionary = [
        "" : ""
    ]

    print(parameters)

    ApiServices.requestPOSTURL(strURL, params: parameters, headers: headers, success:{

        (JSONResponse) -> Void in

        CommonMethodsClass.hideHUD(targetView: self.view)

        print(JSONResponse["message"])

        let strMsg = JSONResponse["message"].stringValue


        if (JSONResponse["status"].intValue == 1)
        {  

        }
        else
        {
            CommonMethodsClass.showAlertMessage(vc: self, titleStr: "Error!", messageStr: strMsg)
        }

    }) {
        (error) -> Void in
        print(error)

        CommonMethodsClass.hideHUD(targetView: self.view)
    }


// Api request method:
class func requestPOSTURL(_ strURL : String, params : [String : AnyObject]?, headers : [String : String]?, success:@escaping (JSON) -> Void, failure:@escaping (Error) -> Void){

    Alamofire.request(strURL, method: .post, parameters: params, encoding: JSONEncoding.default).responseJSON { (responseObject) -> Void in

        print(responseObject)

        if responseObject.result.isSuccess {
            let resJson = JSON(responseObject.result.value as Any)
            success(resJson)
        }
        if responseObject.result.isFailure {
            let error : Error = responseObject.result.error!
            failure(error)
        }
    }
}
  

错误:失败:   responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(错误   Domain = NSCocoaErrorDomain Code = 3840“字符周围的值无效   1.“UserInfo = {NSDebugDescription =字符1周围的值无效。}))

更新:对解析的响应,可能还需要更改。

{
    "status": true,
    "message": "",
    "data": [
        {
            "SalonID": "1",
            "SalonName": "Affinity",
            "SalonEmail": "vay.chaan@th-rce.com",
            "SalonPhone": "9999888877",
            "SalonMobile": "9999888877",
            "SalonAddress": "C-28, Sec-58, India",
            "Latitude": "18.5806",
            "Longitude": "27.36273",
            "Image": null,
            "SalonImage": "",
            "TimeIntervalminutes": 20,
            "AverageRating": 4,
            "IsActive": 1
        },
        {
            "SalonID": "3",
            "SalonName": "Looks",
            "SalonEmail": "rad@th-rce.com",
            "SalonPhone": "99998828877",
            "SalonMobile": "99998388877",
            "SalonAddress": "GP Mall,India",
            "Latitude": "",
            "Longitude": "",
            "Image": null,
            "SalonImage": "",
            "TimeIntervalminutes": 30,
            "AverageRating": 5,
            "IsActive": 1
        }
    ]
}

3 个答案:

答案 0 :(得分:3)

responseJSON替换为responseString

您需要将字符串转换为值。你能更新问题中的字符串吗?

您可以使用此函数将响应字符串转换为JSON:

func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

字符串:let str = "{\"name\":\"James\"}"

用法:let dict = convertToDictionary(text: str)

答案 1 :(得分:1)

尝试使用responseString代替responseJSON,它会起作用

Alamofire.request("URL").responseString { response in
    print(response)

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

答案 2 :(得分:0)

将responseJSON更改为responseString,它将起作用:)

  Alamofire.request("URL").responseString { response in
            print(response)

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