JSONException: el valor de tipo java.lang.String no se puede convertir a JSONObject
Tengo un archivo JSON con 2 matrices JSON: una matriz para rutas y una matriz para lugares de interés.
Una ruta debe constar de varios lugares a los que se dirige el usuario. Desafortunadamente recibo el error:
JSONException: el valor de tipo java.lang.String no se puede convertir a JSONObject
Aquí están mis variables y el código que analiza el archivo JSON:
private InputStream is = null;
private String json = "";
private JSONObject jObj = null;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
// hier habe ich das JSON-File als String
json = sb.toString();
Log.i("JSON Parser", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
Log.i("Analizador JSON", json); me muestra que al principio de la cadena generada hay un signo extraño:
pero el error ocurre aquí:
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
04-22 14:01:05.043: E/JSON Parser(5868): Error al analizar datos org.json.JSONException: Valor //EXTRAÑO SIGNO AQUÍ // de tipo java.lang.String no se puede convertir a JSONObject
¿Alguien tiene idea de cómo deshacerse de estos signos para crear JSONObject?
La razón es que se agregaron algunos caracteres no deseados al componer la cadena. La solución temporal es
return new JSONObject(json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1));
Pero intente eliminar los caracteres ocultos en la cadena fuente.
vea esto http://stleary.github.io/JSON-java/org/json/JSONObject.html#JSONObject-java.lang.String-
Objeto JSON
public JSONObject(java.lang.String source)
throws JSONException
Construya un JSONObject a partir de una cadena de texto JSON de origen. Este es el constructor JSONObject más utilizado.
Parameters:
source - `A string beginning with { (left brace) and ending with } (right brace).`
Throws:
JSONException - If there is a syntax error in the source string or a duplicated key.
intentas usar algo como:
new JSONObject("{your string}")
Tuve el mismo problema durante unos días. Por fin encontré una solución . El servidor PHP devolvió algunos caracteres invisibles que no pudo ver en el LOG o en System.out.
Entonces, la solución fue que intenté subcadenar mi cadena json una por una y cuando llegué a la subcadena (3), el error desapareció.
POR CIERTO. Usé codificación UTF-8 en ambos lados. Lado PHP:header('Content-type=application/json; charset=utf-8');
Lado JAVA:BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
¡Así que prueba la solución una por una 1,2,3,4...! ¡Espero que les ayude chicos!
try {
jObj = new JSONObject(json.substring(3));
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data [" + e.getMessage()+"] "+json);
}