मुझे वायर्ड परिदृश्य का सामना करना पड़ रहा है जहां मैं डबल कोट के अनुरोध में पैरामीटर पास कर रहा हूं।

JSONEncoding.default का उपयोग करके Alamofire स्वचालित रूप से \ के साथ दोहरे उद्धरण के साथ स्ट्रिंग से बच जाता है

"Test "hello " "Test \" hello " होगा

लेकिन बैकहैंड चाहता है कि मैं "Test \\\" hello " (डबल कोट के साथ ट्रिपल स्लैश) भेजूं

क्या ParameterEncoding का उपयोग करके इसे प्राप्त करने का कोई तरीका है या क्या मुझे पैरामीटर में प्रत्येक स्ट्रिंग को मैन्युअल रूप से बदलने की आवश्यकता है? मेरे पास संयोजन में सैकड़ों मापदंडों के साथ कई अनुरोध हैं।

मैंने कोई कोड नहीं जोड़ा है क्योंकि यह साधारण अलामोफायर अनुरोध है। फिर भी, अगर आपको इसे देखने की ज़रूरत है, तो मैं अपने प्रश्न को अलामोफायर अनुरोध कोड के साथ अपडेट कर दूंगा।

-1
Prashant Tukadiya 18 सितंबर 2019, 14:29

1 उत्तर

सबसे बढ़िया उत्तर

नहीं, इस तरह से JSON एन्कोडिंग को अनुकूलित करने का कोई तरीका नहीं है, क्योंकि यह JSONSerialization और JSONEncoder की सीमा है। यदि यह वास्तव में एक आवश्यकता है, तो मैं आपको अपना खुद का ParameterEncoding बनाने का सुझाव दूंगा जो सभी एन्कोडेड पैरामीटर के लिए इस एस्केपिंग को संभालता है।

final class EscapingJSONEncoder: ParameterEncoding {
    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var urlRequest = try urlRequest.asURLRequest()

        guard let parameters = parameters else { return urlRequest }

        do {
            let data = try JSONSerialization.data(withJSONObject: parameters, options: [])

            if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
                urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
            }

            urlRequest.httpBody = data
            urlRequest.httpBody = urlRequest.httpBody.map { data in
                var string = String(decoding: data, as: UTF8.self)
                string = string.replacingOccurrences(of: #"\""#, with: #"\\\""#)

                return Data(string.utf8)
            }

        } catch {
            throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
        }

        return urlRequest
    }


}

यह Data -> String -> Data रूपांतरण के कारण अक्षम है, लेकिन यह छोटे पेलोड के लिए बहुत बुरा नहीं होना चाहिए।

1
Prashant Tukadiya 24 सितंबर 2019, 05:52