JSONException: El valor del tipo java.lang.String no se puede convertir en JSONObject
Tengo un archivo de JSON con 2 JSON-Arrays en él: Una matriz para las rutas y una matriz para las vistas.
Una ruta debe consistir en varias vistas a las que el usuario puede navegar. Lamentablemente estoy recibiendo el error:
- ¿Por qué este análisis de SimpleDataFormat falla en Android?
- Alternativa del método Jsoup.parse ()
- Parse json cadena de fecha en android
- ¿Cómo analizar la respuesta de Json en android?
- Android JSONArrays dentro de JSONArray
JSONException: El valor del tipo java.lang.String no se puede convertir en 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 ("JSON Parser", json); Me muestra que al principio de la cadena generada hay una señal extraña:
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: Parser E / JSON (5868): Error al analizar datos org.json.JSONException: Valor // STRANGE SIGN HERE // del tipo java.lang.String no puede convertirse a JSONObject
Alguien tiene una pista sobre cómo deshacerse de estos signos para crear el JSONObject?
- Errores de json-parsing en tiempo de ejecución
- GSON evitar el JsonSyntaxException devolver el mapeo parcial
- Análisis de la cadena JSON en android
- GSON. Cómo convertir json objeto a json array?
- Error al analizar datos org.json.JSONException: El valor <? Xml del tipo java.lang.String no se puede convertir a JSONArray
- Cómo solucionar IncompatibleClassChangeError durante Android Jackson Parsing usando anotaciones en Android Lollipop?
- Cómo analizar 2013-03-13T20: 59: 31 + 0000 cadena de fecha hasta la fecha
- Base de datos de Android más rápida
Vea este http://stleary.github.io/JSON-java/org/json/JSONObject.html#JSONObject-java.lang.String-
JSONObject
public JSONObject(java.lang.String source) throws JSONException
Construya un JSONObject a partir de una cadena de texto de origen JSON. 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.
Usted intenta utilizar algo como:
new JSONObject("{your string}")
La razón es que algunos caracteres no deseados se añadieron al componer la cadena. La solución temporal es
return new JSONObject(json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1));
Pero trate de eliminar caracteres ocultos en la cadena de origen.
Tuvimos el mismo problema por unos pocos días. Encontré una solución por fin . El servidor PHP devolvió algunos caracteres que no se veían en el registro o en System.out.
Así que la solución fue que traté de substring mi json String uno por uno y cuando llegué a substring (3) el error se fue.
Por cierto Utilicé la codificación UTF-8 en ambos lados. PHP side: header('Content-type=application/json; charset=utf-8');
JAVA side: BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
Así que pruebe la solución uno por uno 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); }
Aquí está la versión UTF-8, con varias excepciones de manejo:
static InputStream is = null; static JSONObject jObj = null; static String json = null; static HttpResponse httpResponse = null; public JSONObject getJSONFromUrl(String url) { // Making HTTP request try { HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 10000); HttpConnectionParams.setSoTimeout(params, 10000); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); HttpProtocolParams.setUseExpectContinue(params, true); // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(params); HttpGet httpPost = new HttpGet( url); httpResponse = httpClient.execute( httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } catch (UnsupportedEncodingException ee) { Log.i("UnsupportedEncodingException...", is.toString()); } catch (ClientProtocolException e) { Log.i("ClientProtocolException...", is.toString()); } catch (IOException e) { Log.i("IOException...", is.toString()); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "utf-8"), 8); //old charset iso-8859-1 StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); reader.close(); json = sb.toString(); Log.i("StringBuilder...", 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 (Exception e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); try { jObj = new JSONObject(json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1)); } catch (Exception e0) { Log.e("JSON Parser0", "Error parsing data [" + e0.getMessage()+"] "+json); Log.e("JSON Parser0", "Error parsing data " + e0.toString()); try { jObj = new JSONObject(json.substring(1)); } catch (Exception e1) { Log.e("JSON Parser1", "Error parsing data [" + e1.getMessage()+"] "+json); Log.e("JSON Parser1", "Error parsing data " + e1.toString()); try { jObj = new JSONObject(json.substring(2)); } catch (Exception e2) { Log.e("JSON Parser2", "Error parsing data [" + e2.getMessage()+"] "+json); Log.e("JSON Parser2", "Error parsing data " + e2.toString()); try { jObj = new JSONObject(json.substring(3)); } catch (Exception e3) { Log.e("JSON Parser3", "Error parsing data [" + e3.getMessage()+"] "+json); Log.e("JSON Parser3", "Error parsing data " + e3.toString()); } } } } } // return JSON String return jObj; }
Creo que el problema puede estar en el charset que usted está intentando utilizar. Probablemente sea mejor usar UTF-8 en lugar de iso-8859-1.
También abra cualquier archivo que se esté utilizando para su InputStream y asegúrese de que no se hayan insertado accidentalmente caracteres especiales. A veces usted tiene que decir específicamente a su editor para mostrar caracteres ocultos / especiales.
return response;
Después de que obtener la respuesta que necesitamos para analizar esto Por:
JSONObject myObj=new JSONObject(response);
En respuesta no hay necesidad de comillas dobles.
Esto es sencillo (gracias Gson)
JsonParser parser = new JsonParser(); String retVal = parser.parse(param).getAsString();
https://gist.github.com/MustafaFerhan/25906d2be6ca109f61ce#file-evaluatejavascript-string-problem
He hecho este cambio y ahora funciona para mí.
//BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); BufferedReader reader = new BufferedReader(new InputStreamReader(is, HTTP.UTF_8), 8);
Esto funcionó para mí
json = json.replace("\\\"","'"); JSONObject jo = new JSONObject(json.substring(1,json.length()-1));
Los 3 caracteres al principio de la cadena json corresponden a Byte Order Mask (BOM), que es una secuencia de bytes para identificar el archivo como archivo UTF8.
Asegúrese de que el archivo que envía el json está codificado con la codificación utf8 (no bom) .
(Tuve el mismo problema, con el editor de TextWrangler. Utilice save as – utf8 (no bom) para forzar la codificación correcta.)
Espero eso ayude.
En mi caso, el problema se produjo desde el archivo php
. Se dio caracteres no deseados. Por eso se produjo un problema de json parsing
.
A continuación, pego mi php code
en Notepad++
y seleccione Encode in utf-8 without BOM
de la ficha Encoding
y ejecutar este código-
Mi problema desapareció.
En mi caso, mi aplicación de Android utiliza Volley para realizar una llamada POST con un cuerpo vacío a una aplicación de API alojada en Microsoft Azure.
El error fue:
JSONException: Value <p>iisnode of type java.lang.String cannot be converted to JSONObject
Este es un fragmento de cómo estaba construyendo la solicitud Volley JSON:
final JSONObject emptyJsonObject = new JSONObject(); JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, emptyJsonObject, listener, errorListener);
Solucioné mi problema creando el JSONObject
con un objeto JSON vacío como sigue:
final JSONObject emptyJsonObject = new JSONObject("{}");
Mi solución está en las líneas de esta respuesta más antigua .