it-swarm.com.de

JSONObject.toString: Wie man Schrägstriche NICHT vermeidet

Ich muss ein Datum in JSON senden. Die Datumszeichenfolge sollte folgendermaßen aussehen:

"15.05.2013"

Stattdessen , JSONObject.toString entgeht wie folgt:

2013 \/5 \/15

Ich verstehe, dass dies getan wird, um JSON-Zeichenfolgen in Skripten zuzulassen, wie diese Frage erklärt: JSON: Warum werden Schrägstriche maskiert?

Aber in meinem Fall brauche ich es nicht. Tatsächlich gibt der Server einen Fehler zurück. Der Server hat damit nichts zu tun, und ich kann den Server nicht reparieren. Deshalb muss ich ihn im Code des mobilen Clients reparieren.

Ich könnte ein String.replace nach der Serialisierung, aber was ist, wenn ich die Zeichenfolge "\ /" tatsächlich in einen anderen Teil des JSON aufnehmen möchte?

Gibt es eine Möglichkeit, ein JSON-Objekt ohne Schrägstriche zu serialisieren? (Wenn möglich, ohne etwas zu entkommen)

Danke im Voraus.

30
Mister Smith

Ich entschied mich schließlich für den schnellen und schmutzigen Trick, die Schrägstriche in der serialisierten Zeichenfolge zu ersetzen, bevor ich sie an den Server sendete. Glücklicherweise entgeht JSONObject auch Backslashes, so dass ich sie auch wieder entfernen muss. Wenn ich nun absichtlich "\ /" senden wollte, wäre die maskierte Zeichenfolge "\\ /" und das Ergebnis des Ersetzens ist die ursprüngliche Zeichenfolge, wie beabsichtigt.

7
Mister Smith

Dieses Verhalten ist fest programmiert in JSONStringer.Java , siehe Methode private void string(String value), Zeile 302+.

Es sollte möglich sein, die Klasse JSONStringer zu kopieren und Ihre eigene Version von value(Object) zu implementieren (Zeile 227+). Implementieren Sie dann Ihre eigene Version von JSONObject . ToString () in eine Utility-Klasse und verwenden Sie statt des Originals Ihren eigenen JSONStringer.

BEARBEITEN: Die Unterklassifizierung von JSONStringer ist nicht einfach, da value () eine private Methode beforeValue () aufruft, auf die nicht zugegriffen werden kann.

3
devconsole
jsonObjSend.toString().replace("\\\\","")

Hat für mich gearbeitet. Ein bisschen schmutziger Trick scheint aber keine andere Lösung zu sein.

1
Vinay

Ich hatte ein ähnliches Problem mit JSONObject "put" beim Umgang mit Daten für ein Bild, das in adat Uri "data: image/png; base64, ....." codiert wurde. Die put-Funktion fügt einen weiteren Schrägstrich hinzu, um das Format in "data: image/png; base64, ....." zu ändern. Es scheint, dass die Ursache des Problems eine Überprüfung der Zeichenfolgenwerte in der JSONObject-Funktion "put" ist, die die zusätzlichen Schrägstriche hinzufügt. Möglicherweise könnte man die Funktion überladen oder die Klasse erweitern. Am einfachsten ist es jedoch, eine eindeutige Zeichenfolge wie guid hinzuzufügen und diese dann durch die Uri-Zeichenfolge zu ersetzen, nachdem die Funktion toString () Ihres JSONObject aufgerufen wurde.

JSONObject userJson = new JSONObject(); 
String myimageUri = "data:image/png;base64,XXXDATAXXX";
userJson.put("imageUri", "b0c8f13d-48b1-46b4-af28-4e2d8004a6f8");
userJson.toString().replace("b0c8f13d-48b1-46b4-af28-4e2d8004a6f8", myimageUri);
0
MoleIsKing