Alamofire如何在Swift中解析JSON?

2ledvvac  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(120)

我使用Alamofire的GET函数从API返回这个JSON。以下是我如何使用Alamofire:

struct Params: Encodable {
            let code: String
            let codeType: String
        }

        let params = Params(code: "709532929804933", codeType: "IDENTCODE")
        let headers: HTTPHeaders = [
            "Authorization": "Basic xxxHIDExxx",
            "Accept": "application/json"
        ]
        
        AF.request("https://xxx.xx/cloudcrm/customer",
                   method: .get,
                   parameters: params,
                   headers: headers).validate(statusCode: 200..<300).responseJSON { response in
                    switch response.result {
                            case .success:
                                debugPrint(response.value as Any)
                         
                    case let .failure(error): 
                                print(error)
                            }
                   }

        
Print json:
{
    customerData = "<zakaznik><zkznid>475301</zkznid><titul></titul><jmeno>757B746D</jmeno><prijmeni>D\U00c1RKOV\U00c1 KARTA</prijmeni><rozliseni></rozliseni><osloveniok>false</osloveniok><kontos></kontos><skupzak1_klic>DK</skupzak1_klic><skupzak2_klic>default</skupzak2_klic><cenkat_klic>1</cenkat_klic><platido>2118-07-31</platido><valid>true</valid></zakaznik>";
    message = "Informace o z\U00e1kazn\U00edkovi \"D\U00c1RKOV\U00c1 KARTA 757B746D\" na\U010dteny.";
}

我试图查看JSON是否有效(https://jsonlint.com/),但它不是。有没有办法在Swift中解析这个字符串?

cnh2zyt3

cnh2zyt31#

是JSON。
它已经被解析了,response.value是一个Dictionary,一个[String: Any],在你的示例中,甚至是一个[String: String]
你打印的是NSDictionarydescription(或多或少是一个Swift字典),输出是OpenStep格式。请注意:"="在key & value和";"在队伍的尽头什么告诉我这也是JSON?您在success case中打印了它,因此它成功地将Data解析为“JSON”对象。
如果你想看到你收到的实际“JSON”数据:

let responseStr = String(data: response.data!, encoding: .utf8)
print("Received: \(responseStr)")

您应该看到它是有效的JSON。
现在,responseJSON已弃用,请使用CodableresponseDecodable(of:)
如果您仍然不想使用Codable

if let dict = response.value as? [String: Any] {
    if let customerData = dict["customerData"] as? String {
        print("customerData: \(customerData)")
        //Parse the XML
    }
    if let message = dict["message"] as? String {
        print("message: \(message)")
    }
}

相关问题