簡體   English   中英

在Java中解析來自Web服務的json數據

[英]parse json data coming from webservice in java

我正在開發android應用程序,其中我將Web服務數據獲取為:

"[{\"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 ;

}

@ 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對象

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM