解析来自java中webservice的json数据

时间:2015-05-15 05:53:02

标签: java json web-services

我正在开发Android应用程序,我将获取网络服务数据:

"[{\"ID\":51,\"Text\":\"!! SAMPLE PROJECT !!\"},{\"ID\":58,\"Text\":\"01 Contracting Test Project\"},{\"ID\":64,\"Text\":\"1212\"},{\"ID\":45,\"Text\":\"CHEMICAL FACTORY PROJECT\"}]"

现在我想在json中解析这些数据我使用replaceAll()函数来替换字符串中的反斜杠,如下所示:

 String jsonFormattedString = line.replaceAll("\\\\", "");

但我觉得这个方法不适合使用,因为它删除了字符串中的所有反斜杠,这会产生像我收到的json节点之类的问题:

"[{\"ID\":9617,\"Text\":\"1 1\/4\\\" PVC\/GI CLAMPS\"}]"

其中Text的字符串值在字符串中包含双引号,这为我创建了问题。所以我的问题是在java中解析这个json数据的最佳方法是什么。

webservice返回的完整json数据如下:

"[{\"ID\":51,\"Text\":\"!! SAMPLE PROJECT !!\"},{\"ID\":58,\"Text\":\"01 Contracting Test Project\"},{\"ID\":64,\"Text\":\"1212\"},{\"ID\":45,\"Text\":\"CHEMICAL FACTORY PROJECT\"},{\"ID\":53,\"Text\":\"Kanix City\"},{\"ID\":54,\"Text\":\"KANIX DREAM CITY\"},{\"ID\":59,\"Text\":\"KANIX DREAM CITY -- PHASE II\"},{\"ID\":62,\"Text\":\"KANIX DREAM CITY PHASE I\"},{\"ID\":55,\"Text\":\"Kishor_TEST\"},{\"ID\":63,\"Text\":\"Next Generation Housing\"},{\"ID\":65,\"Text\":\"Nothing Job\"},{\"ID\":56,\"Text\":\"PAVAN_TEST\"},{\"ID\":46,\"Text\":\"PRODUCTION UNITS\"},{\"ID\":1,\"Text\":\"PROJECT-01(TYPE 1)\"},{\"ID\":3,\"Text\":\"PROJECT-02(TYPE 1)\"},{\"ID\":5,\"Text\":\"PROJECT-03(TYPE 1)\"},{\"ID\":6,\"Text\":\"PROJECT-04(TYPE 1)\"},{\"ID\":7,\"Text\":\"PROJECT-05(TYPE 1)\"},{\"ID\":8,\"Text\":\"PROJECT-06(TYPE 1)\"},{\"ID\":2,\"Text\":\"PROJECT-07(TYPE 2)\"},{\"ID\":4,\"Text\":\"PROJECT-08(TYPE 2)\"},{\"ID\":9,\"Text\":\"PROJECT-09(TYPE 3)\"},{\"ID\":10,\"Text\":\"PROJECT-10(TYPE 3)\"},{\"ID\":11,\"Text\":\"PROJECT-11(TYPE 4)\"},{\"ID\":57,\"Text\":\"Reviera Classic\"},{\"ID\":43,\"Text\":\"ROAD PROJECT\"},{\"ID\":41,\"Text\":\"SAMPLE PROJECT 1\"},{\"ID\":42,\"Text\":\"SAMPLE PROJECT 2\"},{\"ID\":52,\"Text\":\"Shailesh Test project@1000\"},{\"ID\":61,\"Text\":\"VISHAL PARADISE\"},{\"ID\":60,\"Text\":\"WTC\"}]"

我的完整代码是这样的:

@Override
protected List<CItem> doInBackground(String... params) {
    try {
    String line="";
    String ur = "http://"+ServerDetails.hostServer+"/appservices.svc/Projects?Keyword=" ;

       lstItm=new ArrayList<CItem>() ;


        // Replace it with your own WCF service path
        URL json = new URL(ur);
        URLConnection jc = json.openConnection();
        BufferedReader reader = new BufferedReader(new InputStreamReader(jc.getInputStream()));

         line = reader.readLine();
         Log.d("LINE",line);
           JSONArray array=new JSONArray(line);


        Itm=new CItem( "-1", "Select Project" );
        lstItm.add(Itm);
        for(int i=0; i < array.length(); i++) {
            JSONObject tmpJson=array.getJSONObject(i);


            Itm=new CItem(tmpJson.getString("ID"),tmpJson.getString("Text"));
            lstItm.add(Itm);


        }


        return  lstItm ;






    }
    catch(Exception e)
    {
        Log.d("ERRROR--->",e.getMessage());



    }





    return  lstItm ;

}

2 个答案:

答案 0 :(得分:1)

@ mubu9082 ..你不需要删除这些反斜杠...... 因为这个json字符串在日志或调试器中显示为反斜杠..

像往常一样解析它

public void jsonParser()
{
    ArrayList<> list=new ArrayList<>(); //declare this as global
    String responseString="[{\"ID\":51,\"Text\":\"!! SAMPLE PROJECT !!\"},{\"ID\":58,\"Text\":\"01 Contracting Test Project\"},{\"ID\":64,\"Text\":\"1212\"},{\"ID\":45,\"Text\":\"CHEMICAL FACTORY PROJECT\"}]";
    JSONArray array=new JSONArray(responseString);
    String id[]=new String[array.length()];
    String text[]=new String[array.length()];
    for(int i=0;i<array.length();i++)
    {
         JSONObject tmpJson=array.getJSONObject(i);
         id[i]=tmpJson.getString("ID");
         text[i]=tmpJson.getString("TEXT");
         CItem Itm=new CItem(tmpJson.getString("ID"),tmpJson.getString("Text")); lstItm.add(Itm);
         list.add(Itm);
    }
}

这样做是为了从服务器获取响应

try {

        // create HttpClient
        HttpClient httpclient = new DefaultHttpClient();

        // make GET request to the given URL ...use
        HttpResponse httpResponse = httpclient.execute(new HttpGet(url));

        // receive response as inputStream
        HttpEntity entity = httpResponse.getEntity();

        String response= EntityUtils.toString(entity);
        //pass this response to JSONArray object
        //save response and then flush the entity.
        entity.consumeContent();

    } catch (Exception e) {
        Log.d("InputStream", e.getLocalizedMessage());
    }

将此响应传递给JSONArray对象

答案 1 :(得分:0)

public InsuranceDO getInsuranceData1(Context context) {

    String urlStr = "http://192.168.2.11:8080/Service/category/sample";
    InsuranceDO insuranceDO = new InsuranceDO();
    HttpURLConnection urlConnection;
    List<InsuranceDO> insList = new ArrayList<InsuranceDO>();
    try {
        String reqVal = "T=421D84EAC8DEB4878CE48C8A0CB870791EB96FE51C7800A8806032A8CE69A4966D87FFA2E139EE6586C1924F9BD070154CB7E8F92985AC6674B0AD37D9F3FC1ED7B2E4C2D01E5525DCE5E6FCDA26AF890633011894AA2B72604CC8B046E4F9C37DE9A61EECD7000325D3EC673E8609AAD753C52B9BC002C014BC18A35AA8AB3636C237088A08EEED72A7C5F2EDE60155E9111A6F74F082C0E4B45D484C00CA5AD5B3560B8A10D47616E48077EBDE490E&UserCode=172278&DBSource=bali";
        URL url = new URL(urlStr);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setDoOutput(true);
        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");
        OutputStream outputStream = urlConnection.getOutputStream();
        outputStream.write(reqVal.getBytes());
        outputStream.flush();
        int code = urlConnection.getResponseCode();
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        StringBuilder result = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line;
        while ((line = reader.readLine()) != null) {
            result.append(line);
        }
        /**
         * To parse json to list data
         */
        JSONArray jsonArray = new JSONArray(result.toString());
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            insuranceDO.setAgeing(jsonObject.getString("xxx"));
            insuranceDO.setInsuredName(jsonObject.getString("yyyy"));
            insuranceDO.setProposalNumber(jsonObject.getString("zzzz"));
            insuranceDO.setReason(jsonObject.getString("aaaa"));
            insList.add(insuranceDO);
        }


    } catch (Exception e) {
        Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
    Toast.makeText(context, insList.toString(), Toast.LENGTH_LONG).show();
    return insuranceDO;
}