[英]How to parse following json response in android app
我正在使用Android應用程序中的Web服務。 我無法解析應用程序中的以下響應。 它總是給
org.json.JSONException:值[{“ METER_READING”:“ 15”,“ UTILITY_PLAN”:“ 1”,“ uname”:“ vinayak@triffort.com”,“ kwh_usage”:“ 3”,“ meter_reading_date”:“無法將類型為java.lang.String的數據的2014年2月13日“,” ESID“:” abc“,” METER_ID“:” abc100“}]轉換為JSONArray。
下面是我的代碼:
StringEntity entity = new StringEntity(jsonObject.toString(), HTTP.UTF_8);
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
BufferedReader reader =new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String jsonResultStr = reader.readLine();
JSONObject jObject = new JSONObject(jsonResultStr);
JSONArray jArray = jObject.optJSONArray("data");
我收到來自webservice的以下回復
{“ data”:“ [{\\” METER_READING \\“:\\” 25 \\“,\\” UTILITY_PLAN \\“:\\” 1 \\“,\\” uname \\“:\\” vinayak@triffort.com \\“,\\” kwh_usage \\“:\\” 9 \\“,\\” meter_reading_date \\“:\\” 2014年2月13日“,\\” ESID \\“:\\” abc \\“,\\” METER_ID \\“:\\” abc100 \\“} ]“}
試試這個簡單的代碼:
JSONObject o = new JSONObject(new JSONTokener(postResponse));
JSONArray ja = o.getJSONArray("data");
編輯
感謝@McDowell的觀察
new JSONArray(new JSONTokener(jObject.optString("data")));
我得到以下回應
{ "data":"[{\\"METER_READING\\":\\"25...}]" }
數據的值不是數組; 它是一個字符串。 該字符串是您可以解析的有效JSON,但尚不清楚該服務為何執行此操作。
所以這應該工作:
JSONObject jObject = new JSONObject(jsonResultStr);
String parseMeAgain = jObject.optString("data");
嘗試使用類似:
jsonResultStr = jsonResultStr.replace( "\\", "" ).replaceAll( "\"\\[", "[" ).replaceAll( "\\]\"", "]" );
JSONObject jObject = new JSONObject(jsonResultStr);
JSONArray jArray = jObject.optJSONArray("data");
您的json應該是這樣的
{
"myarray": [
{
"METER_READING": "15",
"UTILITY_PLAN": "1",
"uname": "vinayak@triffort.com",
"kwh_usage": "3",
"meter_reading_date": "02-13-2014",
"ESID": "abc",
"METER_ID": "abc100"
}
]
}
用於網絡通話
public String initializeConnection(String url) {
String result = null;
JSONObject jObj;
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
if(client==null){Log.i("Clinet **************** ", "Client is null");}
//post.setEntity(new UrlEncodedFormEntity(params));
HttpResponse res = client.execute(post);
result = inputStreamToString(res.getEntity().getContent()).toString();
Log.d("Result from server:", result);
jObj = new JSONObject(result.trim());
} catch (JSONException e1) {
Log.e("Json Exception", e1.toString());
} catch (ClientProtocolException e2) {
Log.e("Client Protocol", e2.toString());
} catch (IOException e3) {
Log.e("Io exception", e3.toString());
}
return result;
}
private StringBuilder inputStreamToString(InputStream is) throws UnsupportedEncodingException {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is, "iso-8859-1"),8);
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
e.printStackTrace();
}
return answer;
}
從json檢索
ArrayList<String> params = new ArrayList<String>();
String result = networkCall.initializeConnection(url);
jObj = new JSONObject(result);
JSONArray jArray = jObj.optJSONArray("myarray");
params.add(jArray.optString(1));
params.add(jArray.optString(2));
params.add(jArray.optString(3));
params.add(jArray.optString(4));
params.add(jArray.optString(5));
params.add(jArray.optString(6));
現在數據已存儲在params
您可以根據需要區分和存儲
您可以這樣做:
JSONArray jsonArray = new JSONArray(result); // Pass your result here..
JSONObject jsonObject = jsonArray.getJSONObject(0);
String meterReading = jsonObject.getString("METER_READING");
String plan = jsonObject.getInt("UTILITY_PLAN");
String uname= jsonObject.getString("uname");
String meter_reading_date= jsonObject.getString("meter_reading_date");
String ESID= jsonObject.getString("ESID");
String METER_ID= jsonObject.getString("METER_ID");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.