2015-03-07 5 views
-1

У меня возникают некоторые проблемы при анализе ответа JSON на Android. Ответ я получаю:Не удается правильно разобрать JSON

{ 

"response": "{\"session_token\":\"48500d8e42acc09aa45cb8f3a7ba2b30\",\"user_login\":\"newoff2\",\"user_id\":\"62\",\"user_profile_img\":\"http://onepgr.com/system/photos/62/medium/userfile054c35e29.png?1422089771\",\"success\":\"0\",\"user_email\":\"[email protected]\"}" 

} 

мне нужны значения user_login, success, user_profile_img, user_email. Вот то, что я пытался до сих пор, но это не будет делать то, что мне нужно:

HttpResponse response = httpClient.execute(httpPost); 
// write response to log 
Log.d("Http Post Response:", response.toString()); 
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
String json = reader.readLine(); 

Log.d("Final Response",json); 


jsonObject = new JSONObject(json); 
JSONObject json1=jsonObject.getJSONObject("response"); 
String str = json1.getString("success"); 
Log.e("Parsed data is",str); 
+0

ваш ответ JSON в неправильном формате –

+0

Я знаю, братан ,,, но как расшифровать его .. вызвать его от клиента и не могу быть изменен @Ravi –

+1

просто заменить \ «с» –

ответ

1

Использование Scanner для удаления \:

String resultStr = new Scanner(json).useDelimiter("\\A").next(); 
jsonObject = new JSONObject(resultStr); 

Выше используется для BufferedInputStream, чтобы получить JSON строку.


[UPDATE:]

Для BufferReader, необходимо использовать StringBuilder, чтобы получить JSON строку:

StringBuilder strBuilder = new StringBuilder(); 

String line; 
while ((line = reader.readLine()) != null) { 
    strBuilder.append(line); 
} 

//for your JSON string, should use 'JSONTokener' to parse 
jsonObject = (JSONObject) new JSONTokener(strBuilder.toString()).nextValue(); 
JSONObject json1=jsonObject.getJSONObject("response"); 
String str = json1.getString("success"); 

Это должно работать для вашего дела!

+0

Thnks для ответ .. позвольте мне попробовать это .. :) –

+0

Ответ: {"response": "{\" session_token \ ": \" 09b210402 c75b2900c77b5b5e486d836 \ "\ "user_login \": \ "newoff2 \", \ "user_id \": \ "62 \", \ "user_profile_img \": \" http://onepgr.com/system/photos/62/ medium/userfile054c35e29.png? 1422089771 \ ", \" success \ ": \" 0 \ ", \" user_email \ ": \" [email protected] \ "}"} –

+0

W/System.err: org.json .JSONException: Value {"session_token": "09b210402c75b2900c77b5b5e486d836", "user_login": "newoff2", "user_id": "62", "user_profile_img": "http://onepgr.com/system/photos/62/medium/ userfile054c35e29.png? 1422089771 "," success ":" 0 "," user_email ":" [email protected] "} при ответе типа java.lang.String не могут быть преобразованы в JSONObject System.err: at org .json.JSON.typeMismatch (JSON.java:100) –

1

использование этого

json=json.replace("\\\"", "\""); 
    Log.e("resule",json); 
    try { 
     JSONObject jsonObject = new JSONObject(json); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

thnks .. позвольте мне попробовать его –

+0

Ожидаемое буквальное значение у персонажа 13 –

+0

Его дарение erro r нравится это –

1

вы можете использовать регулярные выражения, чтобы ваша строка JSON интерпретируемого

var res = data.replace(/\\"/g, '').replace(/\"{/g, '{').replace(/\}"/g, '}'); 
var jsonData = JSON.parse(res); 
alert(jsonData.response.user_login); 

Вот FIDDLE

Примечания: в скрипке я объявил свой JSON с '' для его заполнения строка

1
Try this.... 

InputStream inputStream = null; 
    String result = null; 
    try { 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 

     inputStream = entity.getContent(); 
     // json is UTF-8 by default 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
     StringBuilder sb = new StringBuilder(); 

     String line = null; 
     while ((line = reader.readLine()) != null) 
     { 
      sb.append(line + "\n"); 
     } 
     result = sb.toString(); 

     Log.d("Result",result); 

     JSONObject jsonObject = new JSONObject(result); 
      String resJson=jsonObject.getString("response"); 
     Log.d("Result",resJson); 
     JSONObject jsparam=new JSONObject(resJson); 
     String success=jsparam.getString("success"); 

     Log.d("Value for success",success); 
     // JSONObject json1=jsonObject.getJSONObject("response"); 
     //String objResponse = json1.getString("success"); 
    } catch (Exception e) { 
     // Oops 
    } 
    finally { 
     try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
    } 
Смежные вопросы