java - 在java中解析来自webservice的json数据

标签 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 ;

}

最佳答案

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

关于java - 在java中解析来自webservice的json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30252445/

相关文章:

javascript - 如何通过 AJAX 显示 Rails 中的验证错误?

json - JACKSON是否支持Java泛型?

json - Swift - "Instance member cannot be used on type"错误的简单修复?

c# - 通过 Web 服务序列化自定义对象中的名称/值对

Java错误: <identifier> expected timer.开始();

java - UUID 到 CRC32 的转换和可能的冲突

java - 使用数组在 system.print 上格式化为小数点后三位

java - 为 OpenTSDB 编写收集器

web-services - 记录 ServiceStack Web 服务

java - 聊天应用程序的服务器端实现