JSONException: la valeur de type java.lang.Ssortingng ne peut pas être convertie en JSONObject

J’ai un fichier JSON avec 2 tableaux JSON: un tableau pour les itinéraires et un tableau pour les vues.

Un itinéraire doit comporter plusieurs sites vers lesquels l’utilisateur peut naviguer. Malheureusement, je reçois l’erreur:

JSONException: la valeur du type java.lang.Ssortingng ne peut pas être convertie en JSONObject

Voici mes variables et le code qui parsing le fichier JSON:

private InputStream is = null; private Ssortingng json = ""; private JSONObject jObj = null; try { BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); SsortingngBuilder sb = new SsortingngBuilder(); Ssortingng line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); // hier habe ich das JSON-File als Ssortingng json = sb.toSsortingng(); Log.i("JSON Parser", json); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toSsortingng()); } // try parse the ssortingng to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toSsortingng()); } // return JSON Ssortingng return jObj; } 

Log.i (“JSON Parser”, json); me montre qu’au début de la chaîne générée, il y a un signe étrange: entrer la description de l'image ici

mais l’erreur se produit ici:

 try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toSsortingng()); } 

04-22 14: 01: 05.043: Analyseur E / JSON (5868): Erreur lors de l’parsing des données org.json.JSONException: Valeur // SIGNAL STRANGE ICI // de type java.lang.Ssortingng ne peut pas être converti en JSONObject

Quelqu’un at-il une idée sur comment se débarrasser de ces signes afin de créer le JSONObject?

voir ceci http://stleary.github.io/JSON-java/org/json/JSONObject.html#JSONObject-java.lang.Ssortingng-

JSONObject

 public JSONObject(java.lang.Ssortingng source) throws JSONException 

Construisez un JSONObject à partir d’une chaîne de texte JSON source. C’est le constructeur JSONObject le plus utilisé.

 Parameters: source - `A ssortingng beginning with { (left brace) and ending with } (right brace).` Throws: JSONException - If there is a syntax error in the source ssortingng or a duplicated key. 

vous essayez d’utiliser quelque chose comme:

 new JSONObject("{your ssortingng}") 

La raison est que certains caractères indésirables ont été ajoutés lors de la composition de la chaîne. La solution temporaire est

 return new JSONObject(json.subssortingng(json.indexOf("{"), json.lastIndexOf("}") + 1)); 

Mais essayez de supprimer les caractères cachés sur la chaîne source.

Eu le même problème pendant quelques jours. J’ai enfin trouvé une solution . Le serveur PHP a renvoyé des caractères inconnus que vous ne pouviez pas voir dans le journal ou dans System.out.

Donc, la solution a été que j’ai essayé de sous-traiter mon json Ssortingng un par un et quand je suis arrivé à la sous-chaîne (3), l’erreur a disparu.

BTW J’ai utilisé l’encodage UTF-8 des deux côtés. Côté PHP: header('Content-type=application/json; charset=utf-8');

Côté JAVA: BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);

Alors essayez la solution une par une 1,2,3,4 …! J’espère que ça vous aide les gars!

 try { jObj = new JSONObject(json.subssortingng(3)); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data [" + e.getMessage()+"] "+json); } 

Voici la version UTF-8, avec plusieurs exceptions:

 static InputStream is = null; static JSONObject jObj = null; static Ssortingng json = null; static HttpResponse httpResponse = null; public JSONObject getJSONFromUrl(Ssortingng 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.toSsortingng()); } catch (ClientProtocolException e) { Log.i("ClientProtocolException...", is.toSsortingng()); } catch (IOException e) { Log.i("IOException...", is.toSsortingng()); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "utf-8"), 8); //old charset iso-8859-1 SsortingngBuilder sb = new SsortingngBuilder(); Ssortingng line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); reader.close(); json = sb.toSsortingng(); Log.i("SsortingngBuilder...", json); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toSsortingng()); } // try parse the ssortingng to a JSON object try { jObj = new JSONObject(json); } catch (Exception e) { Log.e("JSON Parser", "Error parsing data " + e.toSsortingng()); try { jObj = new JSONObject(json.subssortingng(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.toSsortingng()); try { jObj = new JSONObject(json.subssortingng(1)); } catch (Exception e1) { Log.e("JSON Parser1", "Error parsing data [" + e1.getMessage()+"] "+json); Log.e("JSON Parser1", "Error parsing data " + e1.toSsortingng()); try { jObj = new JSONObject(json.subssortingng(2)); } catch (Exception e2) { Log.e("JSON Parser2", "Error parsing data [" + e2.getMessage()+"] "+json); Log.e("JSON Parser2", "Error parsing data " + e2.toSsortingng()); try { jObj = new JSONObject(json.subssortingng(3)); } catch (Exception e3) { Log.e("JSON Parser3", "Error parsing data [" + e3.getMessage()+"] "+json); Log.e("JSON Parser3", "Error parsing data " + e3.toSsortingng()); } } } } } // return JSON Ssortingng return jObj; } 

C’est simple (merci Gson)

 JsonParser parser = new JsonParser(); Ssortingng retVal = parser.parse(param).getAsSsortingng(); 

https://gist.github.com/MustafaFerhan/25906d2be6ca109f61ce#file-evaluatejavascript-ssortingng-problem

Je pense que le problème peut être dans le jeu de caractères que vous essayez d’utiliser. Il est probablement préférable d’utiliser UTF-8 au lieu de iso-8859-1.

Ouvrez également le fichier utilisé pour votre InputStream et assurez-vous qu’aucun caractère spécial n’a été accidentellement inséré. Parfois, vous devez spécifiquement indiquer à votre éditeur pour afficher les caractères cachés / spéciaux.

 return response; 

Après cela obtenez la réponse dont nous avons besoin pour parsingr ceci Par:

 JSONObject myObj=new JSONObject(response); 

En réponse, il n’y a pas besoin de guillemets doubles.

Cela a fonctionné pour moi

 json = json.replace("\\\"","'"); JSONObject jo = new JSONObject(json.subssortingng(1,json.length()-1)); 

J’ai fait ce changement et maintenant ça marche pour moi.

 //BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); BufferedReader reader = new BufferedReader(new InputStreamReader(is, HTTP.UTF_8), 8); 

Les 3 caractères au début de votre chaîne json correspondent au masque BOM (Byte Order Mask), qui est une séquence d’octets permettant d’identifier le fichier en tant que fichier UTF8.

Assurez-vous que le fichier qui envoie le json est codé avec l’encodage utf8 (no bom) .

(J’avais le même problème avec l’éditeur TextWrangler. Utilisez save as – utf8 (no bom) pour forcer le bon encodage.)

J’espère que cela aide.

Dans mon cas, le problème est apparu à partir du fichier php . C’est la raison pour laquelle un problème d’ json parsing s’est produit.

Ensuite, je colle mon php code dans Notepad++ et sélectionne Encode in utf-8 without BOM de l’onglet Encoding et exécute ce code-

Mon problème a disparu.

Dans mon cas, mon application Android utilise Volley pour passer un appel POST avec un corps vide à une application API hébergée sur Microsoft Azure.

L’erreur était:

 JSONException: Value 

iisnode of type java.lang.Ssortingng cannot be converted to JSONObject

Ceci est un extrait de la façon dont je construisais la requête JSON Volley:

 final JSONObject emptyJsonObject = new JSONObject(); JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, emptyJsonObject, listener, errorListener); 

J’ai résolu mon problème en créant l’object JSONObject avec un object JSON vide comme suit:

 final JSONObject emptyJsonObject = new JSONObject("{}"); 

Ma solution va dans le sens de cette ancienne réponse .

si la valeur de la clé vient en tant que chaîne et que vous voulez la convertir en JSONObject ,

Prenez d’abord votre key.value dans une variable Ssortingng comme

  Ssortingng data = yourResponse.yourKey; 

puis convertir en JSONArray

 JSONObject myObj=new JSONObject(data);