繁体   English   中英

如何在Android应用程序中解析以下JSON响应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM