JSONObject.toString: cómo no escapar de barras

Necesito enviar una fecha en JSON. La cadena de fecha debe tener este aspecto:

"2013/5/15"

En su lugar, JSONObject.toString escapa de la manera siguiente:

"2013 \ / 5 \ / 15"

Entiendo que esto se hace para permitir que las secuencias de json dentro de las etiquetas de scripts, como esta pregunta explica: JSON: ¿por qué las barras diagonales se han escapado?

Pero en mi caso no lo necesito. De hecho, el servidor está devolviendo un error. El servidor no se está ocupando de esto y no puedo fijar el servidor, así que debo fijarlo en el código móvil del cliente.

Podría hacer un String.replace después de serializarlo, pero lo que si realmente quería incluir la cadena "\ /" en cualquier otra parte de la JSON?

¿Hay una manera de serializar un objeto JSON sin escapar de barras? (Si es posible, sin escapar nada)

Gracias por adelantado.

Finalmente opté por el truco rápido y sucio de reemplazar las barras inclinadas de escape en la cadena serializada antes de enviarlo al servidor. Afortunadamente, JSONObject también escapa de barras inversas, así que también debo deshacerlas. Ahora si quise enviar "\ /" intencionalmente la cadena de escape sería "\\ /" y el resultado de reemplazar es la cadena original según lo previsto.

Ese comportamiento es codificado en JSONStringer.java , vea el método private void string(String value) , line 302+.

Debería ser posible copiar la clase JSONStringer e implementar su propia versión de value(Object) (línea 227+). A continuación, implemente su propia versión de JSONObject .toString () en una clase de utilidad y utilice su propio JSONStringer en lugar del original.

EDIT: Subclassing JSONStringer no será fácil porque valor () llama a un método privado beforeValue () que no se puede acceder.

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

Trabajó para mí. Un poco sucio truco pero no parece ninguna otra solución.

Tuve un problema similar con JSONObject "poner" cuando se trata de datos para una imagen que se codificó en un adat Uri "data: image / png; base64, …..". La función put añadiría otra barra para cambiar el formato a "data: image / png; base64, …..". Parece que el origen del problema es una comprobación de valor de cadena dentro de la función JSONObject "put" que agrega las barras extra. Uno podría tal vez sobrecargar la función o extender la clase, pero encontré que la forma más fácil es agregar una cadena única como guid y luego reemplazar ese guid con su cadena Uri después de llamar a la función toString () de su JSONObject.

 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); 
  • Cómo analizar un flujo de entrada JSON
  • Analizando el enorme objeto JSON en Android?
  • Org.json.JSONException: Objeto no terminado en el carácter 14
  • ¿Cuál es el propósito básico de la anotación @SerializedName en android usando GSon
  • Obtener JSONObject de JSONArray
  • ¿Qué encabezado se debe utilizar para enviar GZIP comprimido JSON de Android Client a Server?
  • Creación de Hashmap desde una cadena JSON
  • Creación de un menú desplegable desde un archivo .json
  • Uso de Retrofit para acceder a una API con key / id
  • Cómo cargar la imagen en base64 en el servidor
  • ProgressDialog o ProgressBar ralentiza la aplicación que ejecuta Android 4.1
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.