servlet中resultset轉化為json (java) list轉為json


      最近在做Android從服務端拉取數據,采用doget方式向服務器請求數據。服務端經過Sql查詢后得到的ResultSet結果集以json的形式返回。所以重點解決一下數據集是如何封裝成json,以及在客戶端又是如何把返回的json數據流重組成原數據

      開始之前先大概說一下json的一些東西:

      json格式其實質可看成一個字符串流,只不過它帶有json特有的格式:  [{},{},{}...,{}],中括號[]代表的是jsonarray,而其中的花括號{}代表的是jsonobject,json格式的具體情況讀者可百度一下,很容易理解

      開始正題:

       先看數據的結構:

             作為演示,采用下列數據集:

                           

也即:data中的數據如下結構

       {"title":"這是一個標題0","image":"這是圖片0","info":"這是一個詳細信息0"},

       {"title":"這是一個標題1","image":"這是圖片1","info":"這是一個詳細信息1"},

       {"title":"這是一個標題2","image":"這是圖片2","info":"這是一個詳細信息2"},

       {"title":"這是一個標題3","image":"這是圖片3","info":"這是一個詳細信息3"},

       {"title":"這是一個標題4","image":"這是圖片4","info":"這是一個詳細信息4"},

       {"title":"這是一個標題5","image":"這是圖片5","info":"這是一個詳細信息5"},

         ...........................(共20組)

 

數據庫執行查詢后獲得的resultset,其結構正如上面所示,具體的數據會有不同,上述只是舉例方便,下面的操作讀者可自行類比

服務端:

1.將resultset中的數據提取到 List<Map<String, Object>> 結構中:

        List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();

        

2. 將data轉化為JSONArray

         

3.將data轉化為JSONArray后返回給客戶端:

           

 

客戶端:

接收到的json數據是流的形式,下面要做的就是將服務器以json格式封裝起來的resultset還原回來,將json流重組成List<Map<String, Object>> data

1.在executeHttpGet中獲取json格式的接收值,存入String類型的變量中,假設該變量是:receivestring

2.將該receivestring轉化為jsonarray:

         

3.reJsonArray中包含了上述的20個jsonobject,所以現在就需要遍歷reJsonArray,將每個jsonobject中所攜帶的key-value對存入map<>中,此處若有不解,先看一下上面的那個存儲結構,再結合下面的代碼就很好理解了:

          

4.經過上述三步,json流就被還原成了List<Map<String, Object>>結構

 

總結起來,數據的形式變化經歷了這樣一個過程:

             服務端查詢出resultset ------>>> resultset存入List<Map<String, Object>>結構。

             ------>>> 將該List<Map<String, Object>>結構中的數據轉換為json格式返回客戶端。

             ------>>> 客戶端接收到該json流。 ------>>> 將該json流還原成List<Map<String, Object>>結構以供使用

 

 

 

最后貼個我的運行結果圖:(得到這個list<Map<String, Object>>結構后后面的操作真真就靈活了很多了,想怎么來就怎么來)

          

附下演示的源碼 核心是resultset轉json 以及json的還原 

鏈接:http://pan.baidu.com/s/1dFyj1NN 密碼:xwn8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM