Ich verwende AFNetworking
2.0.
In AFNetworking
, AFHTTPRequestOperationManager
Objekt hat eine API:
Es akzeptiert NSDictionary als Parameter für die JSON Payload, die wir an den Server "POST" senden möchten. In meiner Payload habe ich folgendes Schlüssel-Wert-Paar:
"buttonActionParam":"/catalog/special/international-calling"
Durch die Veröffentlichung dieses Payload-Servers wird ungültiges JSON zurückgegeben. Mit Blick auf die Nutzlast auf der Serverseite wurde mir klar, dass AFNetworking tatsächlich sendet:
"buttonActionParam":"\/catalog\/special\/international-calling".
Ich weiß, dass die AFNetworking
Bibliothek die Klassenmethode NSJSONSerialization
von -dataWithJSONObject:
verwendet, die das verursacht. Meine Frage ist:
Q. Wie umgehen Sie dieses Problem?
Dies ist ein bekanntes Problem. Es verhält sich tatsächlich wie vorgesehen (siehe Ссылка ).
Es gibt 3 mögliche Lösungen:
Machen Sie Ihren Server auf die Möglichkeit aufmerksam, dass Zeichenfolgen maskiert werden können. Im Allgemeinen ist dies die beste Lösung.
Verwenden Sie einen anderen JSON-Encoder (z. B. SBJson ) und codieren Sie das Objekt in NSData
, anstatt den standardmäßigen AFNetworking-Serializer zu verwenden .
Kodieren Sie mit NSJSONSerialization
und konvertieren Sie dann die resultierenden Daten in ein NSString
(mit NSUTF8StringEncoding
), bereinigen Sie es und konvertieren Sie es zurück in NSData
. Auch das müssen Sie tun, bevor Sie das Objekt an AFNetworking übergeben.
Am besten implementieren Sie 2 oder 3, indem Sie eine benutzerdefinierte requestSerializer
für die Instanz AFHTTPSessionManager
festlegen. Zum Beispiel finden Sie diese Antwort für ein Beispiel zur Implementierung von 3 (beachten Sie, dass es in Swift ist).
Tags und Links objective-c ios json afnetworking-2