JSONException: el valor de tipo java.lang.String no se puede convertir a JSONObject

Resuelto RCK69 asked hace 54 años • 15 respuestas

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:ingrese la descripción de la imagen aquí

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?

RCK69 avatar Jan 01 '70 08:01 RCK69
Aceptado

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.

Khai Nguyen avatar Mar 18 '2013 04:03 Khai Nguyen

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}")
Zaz Gmy avatar Apr 22 '2012 12:04 Zaz Gmy

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);
        }
MTurPash avatar Jul 31 '2012 06:07 MTurPash