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.
- Android - Conexión a la base de datos MySQL
- Obtener datos de mysql a android con php
- Tener problemas para vincular un objeto ksoap a un ArrayList en Android
- Convertir cadena a Android JSONObject pierde utf-8
- Tipo de incompatibilidad de JSON o org.json.jsonecxeption
- ConstraintLayout forma de contenido cambiado si se desplaza
- Rellenar Listview de JSON
- Retrofit: Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY
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);
- Error en la instalación con el mensaje Archivo no válido
- Grabación de vídeo de la aplicación Android cuando la pantalla está desactivada