objeto - json getstring android
JSONException: el valor de tipo java.lang.String no se puede convertir a JSONObject (13)
Aquí está la versión UTF-8, con varios controles de excepciones:
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;
}
Tengo un archivo JSON con 2 JSON-Arrays: una matriz para rutas y una matriz para vistas.
Una ruta debe consistir en varios lugares a los que se accede al usuario. Lamentablemente, 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 ("JSON Parser", json); me muestra que al comienzo 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: Analizador de E / JSON (5868): Error al analizar datos org.json.JSONException: Valor // EXTRAÑO FIRMA AQUÍ // de tipo java.lang.String no se puede convertir a JSONObject
¿Alguien tiene una pista sobre cómo deshacerse de estos signos para crear JSONObject?
Creo que el problema puede estar en el juego de caracteres que estás tratando de usar. Probablemente sea mejor usar UTF-8 en lugar de iso-8859-1.
También abra cualquier archivo que esté siendo utilizado para su InputStream y asegúrese de que no se inserten accidentalmente caracteres especiales. A veces tienes que decirle específicamente a tu editor que muestre caracteres ocultos / especiales.
En mi caso, el problema ocurrió desde el archivo php
. Le dio caracteres no deseados. Es por eso que se produjo un problema de json parsing
JSON.
Luego pego mi php code
en Notepad++
y selecciono Encode in utf-8 without BOM
desde la pestaña Encoding
y ejecuto este código-
Mi problema se fue.
En mi caso, mi aplicación de Android usa Volley para hacer una llamada POST con un cuerpo vacío a una aplicación 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);
JSONObject
mi problema creando JSONObject
con un objeto JSON vacío de la siguiente manera:
final JSONObject emptyJsonObject = new JSONObject("{}");
Mi solución está en línea con esta respuesta anterior .
Esta es una manera simple (gracias Gson)
JsonParser parser = new JsonParser();
String retVal = parser.parse(param).getAsString();
https://gist.github.com/MustafaFerhan/25906d2be6ca109f61ce#file-evaluatejavascript-string-problem
Esto funcionó para mí
json = json.replace("///"","''");
JSONObject jo = new JSONObject(json.substring(1,json.length()-1));
Hice 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);
La razón es que se agregaron algunos caracteres no deseados cuando compusiste la Cadena. La solución de temperatura es
return new JSONObject(json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1));
Pero intente eliminar los caracteres ocultos en la cadena fuente.
Los 3 caracteres al principio de la cadena json corresponden a la máscara de orden de bytes (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 codificación utf8 (no bom) .
(Tuve el mismo problema, con el editor de TextWrangler. Use guardar como - utf8 (no bom) para forzar la codificación correcta).
Espero eso ayude.
Tuve el mismo problema por algunos días. Encontrado una solución por fin . El servidor PHP devolvió algunos caracteres invisibles que no se podían ver en el LOG o en System.out.
Entonces la solución fue que traté de subscribir mi cadena json una a una y cuando llegué a la subcadena (3) el error desapareció.
Por cierto. utilicé la codificación UTF-8 en ambos lados. Lado PHP: header(''Content-type=application/json; charset=utf-8'');
JAVA side: BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
¡Entonces prueba 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);
}
si el valor de la clave viene como String y desea convertirlo a JSONObject ,
Primero tome su key.value en una variable String como
String data = yourResponse.yourKey;
luego conviértalo en JSONArray
JSONObject myObj=new JSONObject(data);
vea esto 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 JSON de origen. Este es el constructor JSONObject más comúnmente 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.
intenta usar algo como:
new JSONObject("{your string}")
return response;
Después de eso obtenga la respuesta que necesitamos para analizar esto Por:
JSONObject myObj=new JSONObject(response);
En respuesta no hay necesidad de comillas dobles.