如何使用SwiftyJSON解析带有AnyHashable值的PayPal JSON响应?
问题描述:
我正在使用PaypalSDK向我正在开发的应用程序添加PayPal付款方式,它已经在工作,并且当付款成功时,我得到了一个转换为jsonObject的响应,但我不知道如何解析它以便仅从响应中提取代码。这是我收到如何使用SwiftyJSON解析带有AnyHashable值的PayPal JSON响应?
JSON: [AnyHashable("response"): {
code = "******************* -****************-**********************";
}, AnyHashable("response_type"): authorization_code, AnyHashable("client"): {
environment = sandbox;
"paypal_sdk_version" = "2.11.5";
platform = iOS;
"product_name" = "PayPal iOS SDK";
}]
响应而这就是我对我的payPalFuturePaymentViewController方法:
func payPalFuturePaymentViewController(_ futurePaymentViewController: PayPalFuturePaymentViewController, didAuthorizeFuturePayment futurePaymentAuthorization: [AnyHashable: Any]) {
print("PayPal Future Payment Authorization Success!")
self.resultText = futurePaymentAuthorization.description
let jsonObject = JSON(futurePaymentAuthorization.description)
print("JSON: \(jsonObject)")
// send authorization to your server to get refresh token.
futurePaymentViewController.dismiss(animated: true, completion: {() -> Void in
var paypalPago = PagoItem(noTarjeta: "", fechaExp: "", cvc: "", token: "", tipo: "PayPal")
self.metodosPago.append(paypalPago)
self.saveMetodo()
let destViewController : UIViewController = self.storyboard!.instantiateViewController(withIdentifier: "pagosLlenos")
var vcArray = self.navigationController?.viewControllers
vcArray?.removeLast()
vcArray?.append(destViewController)
self.navigationController?.setViewControllers(vcArray!, animated: true)
})
}
所以我想要做的就是得到响应的代码,把它在一个变量,然后包括在paypalPago项变量:
var paypalPago = PagoItem(noTarjeta: "", fechaExp: "", cvc: "", token: PayPalCode, tipo: "PayPal")
如何解析这个JSON和提取我需要的代码任何帮助,将不胜感激:)
答
解决
这是非常容易的实际问题是,我是存储字符串描述不实际的JSON响应,所以我不得不改变
let jsonObject = JSON(futurePaymentAuthorization.description)
到
let jsonObject = JSON(futurePaymentAuthorization)
现在我的回复如下所示:
JSON: {
"client" : {
"environment" : "sandbox",
"product_name" : "PayPal iOS SDK",
"paypal_sdk_version" : "2.11.5",
"platform" : "iOS"
},
"response_type" : "authorization_code",
"response" : {
"code" : "****************_*********_***********************"
}
现在我可以解析它像任何正常的JSON
let response = jsonObject["response"]["code"].string!
print(response)
// send authorization to your server to get refresh token.
futurePaymentViewController.dismiss(animated: true, completion: {() -> Void in
var paypalPago = PagoItem(noTarjeta: "", fechaExp: "", cvc: "", token: response, tipo: "PayPal")
self.metodosPago.append(paypalPago)