將JSON數據轉換成JAVA的實體類

思路:首先將JSON格式的數據轉換成JSONObject,而後將JSONObject轉換成Java的實體類(其中類屬性包括List等類型)java

 

Java實體類:json

SearchFilter 類
複製代碼
1 public class SearchFilter {
 2     private String groupOp;
 3     
 4     private List<SearchRule> rules;
 5 
 6     public String getGroupOp() {
 7         return groupOp;
 8     }
 9 
10     public void setGroupOp(String groupOp) {
11         this.groupOp = groupOp;
12     }
13 
14     public List<SearchRule> getRules() {
15         return rules;
16     }
17 
18     public void setRules(List<SearchRule> rules) {
19         this.rules = rules;
20     }
複製代碼
SearchRule 類:
複製代碼
1 public class SearchRule {
 2     private String field;
 3     private String op;
 4     private String data;
 5     public String getField() {
 6         return field;
 7     }
 8     public void setField(String field) {
 9         this.field = field;
10     }
11     public String getOp() {
12         return op;
13     }
14     public void setOp(String op) {
15         this.op = op;
16     }
17     public String getData() {
18         return data;
19     }
20     public void setData(String data) {
21         this.data = data;
22     }
23 
24 
25 }
複製代碼

 

1 //導入的package
2 import com.fasterxml.jackson.databind.ObjectMapper;
3 import net.sf.json.JSONArray;
4 import net.sf.json.JSONObject;

 

解析JSon格式字符串的方法數組

複製代碼
1 public SearchFilter jsonToSearchFilter(String filters) {
 2         SearchFilter searchFilter = null;
 3         try {
 4             JSONObject jsonobject = JSONObject.fromObject(filters);//將json格式的字符串轉換成JSONObject 對象
 5             JSONArray array = jsonobject.getJSONArray("rules");    //若是json格式的字符串裏含有數組格式的屬性,將其轉換成JSONArray,以方便後面轉換成對應的實體
 6             List<SearchRule> rules = new ArrayList<SearchRule>();
 7             for (int i = 0; i < array.size(); i++) {
 8                 JSONObject object = (JSONObject) array.get(i);     //將array中的數據進行逐條轉換
 9                 SearchRule rule = (SearchRule) JSONObject.toBean(object, SearchRule.class);  //經過JSONObject.toBean()方法進行對象間的轉換
10                 rules.add(rule);
11             }
12             String groupOp = jsonobject.getString("groupOp");  //簡單的直接獲取值
13             searchFilter = new SearchFilter();                 //對SearchFilter對象進行組裝
14             searchFilter.setGroupOp(groupOp);
15             searchFilter.setRules(rules);
16         } catch (Exception e) {
17             System.out.println("filters=" + filters.toString() + ".json轉換成實體類出錯");
18             e.printStackTrace();
19         }
20         return searchFilter;
21     }
複製代碼

這裏只進行了SearchFilter類中list<SearchRule>rule屬性的對象轉換,由於它是一個SearchRule對象數組,須要單獨拿出來進行json轉換成對象,若是直接對filter進行 SearchFilter進行實體轉換會報錯。若是對象中不含有list,array,map等集合,能夠像8-9行同樣進行對象轉換。app

測試:測試

複製代碼
1 public static void main(String[] args) {
2         UserMgmtController con = new UserMgmtController();
3         String filters="{\"groupOp\": \"OR\",\"rules\": [{\"field\": \"realname\",\"op\": \"eq\","+
4                        "\"data\": \"1234\"},{\"field\": \"cityCode\",\"op\": \"ne\",\"data\": \"5678\"}]}";
5         SearchFilter searchFilter =con.jsonToSearchFilter(filters);
6         System.out.println("gop="+searchFilter.getGroupOp()+" rules.size="+searchFilter.getRules().size());
7     }
結果:gop=OR rules.size=2
複製代碼

 

將java對象轉換成json格式:

複製代碼
1 //將Object 對象轉換成 json
 2     public String objectToJson(Object obj) {
 3         ObjectMapper mapper = new ObjectMapper();
 4         // Convert object to JSON string
 5         String jsonStr = null;
 6         try {
 7             jsonStr = mapper.writeValueAsString(obj);
 8         } catch (IOException e) {
 9             log.error(obj + "entity 轉換成 json出錯", e);
10             e.printStackTrace();
11             System.out.println("entity 轉換成 json出錯");
12         }
13         return jsonStr;
14     }
複製代碼

 

將Object 轉換成json字符串時,默認使用用是的駝峯方式,若是不想使用駝峯則能夠增長紅色部分設置,帶下劃線的也能夠原樣輸出:this

 

複製代碼
1 public String objectToJson(Object obj){
 2         ObjectMapper mapper = new ObjectMapper();
 3         String json =null;
 4         try {
 5             PropertyNamingStrategy.PascalCaseStrategy pp = new PropertyNamingStrategy.PascalCaseStrategy();            
 6             mapper.setPropertyNamingStrategy(pp);
 7             json = mapper.writeValueAsString(obj);
 8         } catch (JsonProcessingException e) {
 9             log.error("json對象轉換失敗",e);
10             e.printStackTrace();
11         }
12         return json;
13     }
複製代碼

結果:spa

"UpLoadDateTime":"2017-09-25 10:51:41","OrganizationId":"B3EA5A4D-7C60-4C21-AF09-494890467C34" ,"Test_Code":""
相關文章
相關標籤/搜索