преобразование из строки в объект JSON android
Я работаю над приложением для Android. В моем приложении я должен преобразовать строку в объект Json, а затем проанализировать значения. Я проверил решение в stackoverflow и нашел подобную проблему здесь ссылке
решение такой
`{"phonetype":"N95","cat":"WP"}`
JSONObject jsonObj = new JSONObject("{"phonetype":"N95","cat":"WP"}");
я использую тот же способ в моем коде . Моя строка
{"ApiInfo":{"description":"userDetails","status":"success"},"userDetails":{"Name":"somename","userName":"value"},"pendingPushDetails":[]}
string mystring= mystring.replace(""", "\"");
и после замены я получил результат как этот
{"ApiInfo":{"description":"userDetails","status":"success"},"userDetails":{"Name":"Sarath Babu","userName":"sarath.babu.sarath babu","Token":"ZIhvXsZlKCNL6Xj9OPIOOz3FlGta9g","userId":"118"},"pendingPushDetails":[]}
когда я выполнить JSONObject jsonObj = new JSONObject(mybizData);
я получаю ниже исключение json
org.json.JSONException: Expected literal value at character 1 of
пожалуйста, помогите мне решить мою проблему.
7 ответов:
удалить слеши:
String json = {"phonetype":"N95","cat":"WP"}; try { JSONObject obj = new JSONObject(json); Log.d("My App", obj.toString()); } catch (Throwable t) { Log.e("My App", "Could not parse malformed JSON: \"" + json + "\""); }
работы
String json = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}"; try { JSONObject obj = new JSONObject(json); Log.d("My App", obj.toString()); Log.d("phonetype value ", obj.getString("phonetype")); } catch (Throwable tx) { Log.e("My App", "Could not parse malformed JSON: \"" + json + "\""); }
чтобы получить JSONObject или JSONArray из строки, я создал этот класс:
public static class JSON { public Object obj = null; public boolean isJsonArray = false; JSON(Object obj, boolean isJsonArray){ this.obj = obj; this.isJsonArray = isJsonArray; } }здесь, чтобы получить JSON:
public static JSON fromStringToJSON(String jsonString){ boolean isJsonArray = false; Object obj = null; try { JSONArray jsonArray = new JSONArray(jsonString); Log.d("JSON", jsonArray.toString()); obj = jsonArray; isJsonArray = true; } catch (Throwable t) { Log.e("JSON", "Malformed JSON: \"" + jsonString + "\""); } if (object == null) { try { JSONObject jsonObject = new JSONObject(jsonString); Log.d("JSON", jsonObject.toString()); obj = jsonObject; isJsonArray = false; } catch (Throwable t) { Log.e("JSON", "Malformed JSON: \"" + jsonString + "\""); } } return new JSON(obj, isJsonArray); }пример:
JSON json = fromStringToJSON("{\"message\":\"ciao\"}"); if (json.obj != null) { // If the String is a JSON array if (json.isJsonArray) { JSONArray jsonArray = (JSONArray) json.obj; } // If it's a JSON object else { JSONObject jsonObject = (JSONObject) json.obj; } }
вам нужны только строки кода, как показано ниже:
try { String myjsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}"; JSONObject jsonObject = new JSONObject(myjsonString ); //getting specific key values Log.d("phonetype = ", jsonObject.getString("phonetype")); Log.d("cat = ", jsonObject.getString("cat"); }catch (Exception ex) { ex.printStackTrace(); }
вот код, и вы можете решить, какой
(синхронизированные)StringBuffer или более быстрый StringBuilder для использования.бенчмарк показывает, что StringBuilder работает быстрее.
public class Main { int times = 777; long t; { StringBuffer sb = new StringBuffer(); t = System.currentTimeMillis(); for (int i = times; i --> 0 ;) { sb.append(""); getJSONFromStringBuffer(String stringJSON); } System.out.println(System.currentTimeMillis() - t); } { StringBuilder sb = new StringBuilder(); t = System.currentTimeMillis(); for (int i = times; i --> 0 ;) { getJSONFromStringBUilder(String stringJSON); sb.append(""); } System.out.println(System.currentTimeMillis() - t); } private String getJSONFromStringBUilder(String stringJSONArray) throws JSONException { return new StringBuffer( new JSONArray(stringJSONArray).getJSONObject(0).getString("phonetype")) .append(" ") .append( new JSONArray(employeeID).getJSONObject(0).getString("cat")) .toString(); } private String getJSONFromStringBuffer(String stringJSONArray) throws JSONException { return new StringBuffer( new JSONArray(stringJSONArray).getJSONObject(0).getString("phonetype")) .append(" ") .append( new JSONArray(employeeID).getJSONObject(0).getString("cat")) .toString(); } }
может быть ниже лучше.
JSONObject jsonObject=null; try { jsonObject=new JSONObject(); jsonObject.put("phonetype","N95"); jsonObject.put("cat","wp"); String jsonStr=jsonObject.toString(); } catch (JSONException e) { e.printStackTrace(); }
Comments