gpt4 book ai didi

ios - JSONSerialization 在应用程序中返回 false,在 postman 中返回 true

转载 作者:行者123 更新时间:2023-11-30 10:58:46 25 4
gpt4 key购买 nike

我使用 Alamofire 和 SwiftyJSON 来发布 HTTP 请求。应用程序中的选项允许用户选择产品和相关的变量选项。我使用 JSONSerialization 对 JSON 响应进行编码并将其与请求一起发回。

在 Postman 上进行测试时,我得到了阳性结果,而在应用程序中却返回了错误结果。我已经努力寻找解决方案几个小时了,但一无所获。

发布请求的代码:

   var optionDictionary = [String:AnyObject]()
var requstParams = [String:String]();
requstParams["product_id"] = self.productId
requstParams["quantity"] = self.quantityValue.text
do {
let jsonSortData = try JSONSerialization.data(withJSONObject: self.optionDictionary, options: [])
let jsonSortString = String(data: jsonSortData, encoding: .utf8)!
requstParams["option"] = jsonSortString
}
catch {
print(error.localizedDescription)
}

NetworkManager.sharedInstance.callingHttpRequest(params:requstParams, apiname:"api/addtoCart", cuurentView: self, method: .post, encoding: JSONEncoding.default){success,responseObject in
if success == 1{
let dict = responseObject as! NSDictionary;
NetworkManager.sharedInstance.dismissLoader()
self.view.isUserInteractionEnabled = true
if dict.object(forKey: "success") as! Int == 1{
let data = dict.object(forKey: "total") as! String
self.tabBarController!.tabBar.items?[3].badgeValue = data.components(separatedBy: " ")[0]
self.navigationCart(cartCount:data.components(separatedBy: " ")[0])
if self.goToBagFlag == true{
self.tabBarController!.selectedIndex = 3
}

}
}
}

Xcode 调试器显示

url https://www.example.com/api/addtoCart
params ["product_id": "23490", "quantity": "1", "option": "{\"2008\":\"7404\"}"]
Success returnData {"success":false,"error":{"option":{"2008":"Option is required!"}}}

在 Postman 中,当我使用以下值时

{
"quantity": "1",
"product_id": "23490",
"option": {"2008":7403}
}

我成功返回= true。

我很困惑我做错了什么?

最佳答案

好的,伙计...开始了...

您的问题出在第二行:

您正在使用 String 作为值来声明字典。

var requestParams = [String:String]()

API 需要一个 Int 作为值。

"option": {"2008":7403}

我建议您停止使用 SwiftyJSON,因为 Codable 是一个“工厂”协议(protocol)。您可以按照您想要的数据建模方式对结构进行建模。在本例中,原始 JSON 作为 Codable 结构如下所示。

struct Order: Codable {
let quantity: String
let productID: String
let option: [String: Int]
}

假设您想要创建订单...具体操作方法如下:

let order = Order(quantity: "1",
productId: "23490",
option: ["2008":7403])

当您使用编码器时,您将像这样使用它:

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase

convertToSnakeCase 会将您的 JSON key 从 productId 转换为 product_id,并且您的声明将遵循 Swift 的驼峰命名约定。

这是一个post you may find helpful

关于ios - JSONSerialization 在应用程序中返回 false,在 postman 中返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53643488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com