Android原生json和fastjson的簡單使用


 android原生操作json數據

主要是兩個類 JSONObject 操作對象     JONSArray操作json數組

 

對象轉json

 1          //創建學生對象   2 Student student=new Student();  3 student.setAge(23);  4 student.setClazz("六年級");  5 student.setName("王二麻子");  6 //創建JSONObject   7 JSONObject jsonObject=new JSONObject();  8 //鍵值對賦值   9 jsonObject.put("age",student.getAge()); 10 jsonObject.put("name",student.getName()); 11 jsonObject.put("clazz",student.getClazz()); 12 //轉化成json字符串 13 String json=jsonObject.toString(); 14 //輸出日志 15 Log.e("ObjectToJson",json); 

 

 Log日志顯示

  

json轉對象

  新建一個JSONObject 把json串通過構造方法賦值   這個JSONObject 對象就帶有json的值     然后創建對象 一個一個賦值  JSONObject 對於不同類型的值 有不同的get方法

1  JSONObject jsonObject=new JSONObject(json); 2  Student student=new Student(); 3  student.setName(jsonObject.getString("name")); 4  student.setClazz(jsonObject.getString("clazz")); 5  student.setAge(jsonObject.getInt("age")); 6  Log.e("JsonToObject",student.getName()+"======"+student.getClazz()+"===="+student.getAge());

 

 

 

 

List轉json  

  使用JONSArray

  

 1 //創建一個集合
 2 List<Student> students=new ArrayList<Student>();  3 students.add(student);  4 students.add(student);  5 //創建一個JSONArray 
 6 JSONArray jsonArray=newJSONArray();  7 //遍歷學生集合
 8 for(inti=0;i<students.size();i++){  9   //獲取學生對象
10   Studentstu=students.get(i); 11   //創建JSONObject 12   JSONObject jo=newJSONObject(); 13   //賦值
14   jo.put("age",stu.getAge()); 15   jo.put("name",stu.getName()); 16   jo.put("clazz",stu.getClazz()); 17   //把JSONObject 添加到JSONArray 
18   jsonArray.put(jo); 19 } 20 //toString轉為json
21 String json=jsonArray.toString(); 22 Log.e("ListToJson",json);

 

json轉List

  

 1 //創建JSONArray把json傳入
 2 JSONArray jsonArray=new JSONArray(json);  3 //創建學生集合
 4 Student students=new ArrayList<Student>();  5 Log.e("BeforeJsonToList","集合長度"+students.size());  6 //遍歷jsonArray
 7 for(inti=0;i<jsonArray.length();i++){  8   //獲取JSONObject對象
 9   JSONObject jsonObject=jsonArray.getJSONObject(i); 10   //創建學生對象
11   Student stu=new Student(); 12   //賦值
13   jsonObject.put("age",stu.getAge()); 14   jsonObject.put("name",stu.getName()); 15   jsonObject.put("clazz",stu.getClazz()); 16   //把學生對象添加到集合中
17   students.add(stu); 18 } 19 Log.e("AfterJsonToList","集合長度"+students.size());

注意 :在使用JSONObject和JSONArray的過程中是需要捕獲異常的

有沒有感覺很麻煩,這要是數據多了簡直是要累死人了

變簡單的方法就是下載一個號稱史上最快json操作的fastjson.jar  阿里出品  然后使用就簡單了

 

FastJson操作數據

  對象轉json

1 //創建學生對象
2 Student student=new Student(); 3 student.setClazz("一班"); 4 student.setAge(23); 5 student.setName("李四"); 6 //將對象轉為json串
7 String json=JSON.toJSONString(student); 8 Log.e("ObjectToJson",json);

只有一句話 就完成了 簡單到爆有沒有   感謝馬雲粑粑!!!

 

 

json轉對象

1 //將json轉為對象 參數1json 參數2對象類型
2 Student student=JSON.parseObject(json,Student.class); 3 Log.e("JsonToObject","=========="+student.getName());

 同樣只有一句話  相對於android原生真是感人

 

 

list轉json

1 List<Student>stuList=new ArrayList<Student>(); 2 stuList.add(student); 3 stuList.add(student); 4 stuList.add(student); 5 //List集合轉json
6 json=JSON.toJSONString(stuList); 7 Log.e("ListToJson","=========="+json);

集合中添加了三個同一個對象   json字符串的輸出 就變成了 ref,{0}  很明顯這是引用第一個對象     因為你添加了相同的對象   fastjson就不創建了  直接引用  這也是他號稱最快的原因

但是隨之而來的就有一個問題     fastjson識別引用 其他的jar不識別        如果服務器使用fastjson  客戶端使用gson  怎么辦嘞

1,都使用fastjson

2.在轉json的時候設置一條屬性    禁用循環引用對象 就ok

 

1 json=JSON.toJSONString(stuList,SerializerFeature.DisableCircularReferenceDetect);

 

 

json轉list

1 stuList=JSON.parseArray(json,Student.class); 2 Student student1=stuList.get(0); 3 Log.e("JsonToList","====================="+student1.getName());

 

有時候呢  並不需要對象里的所有字段    這時候就可以設置一個屬性過濾器  把你不需要的字段過濾掉

 1     //過濾字段 屬性過濾器PropertyFilter
 2         json=JSON.toJSONString(stuList, new PropertyFilter() {  3             @Override//參數1 正在被過濾的對象 參數2 過濾的屬性名 參數3 屬性值
 4             public boolean apply(Object o, String s, Object o1) {  5                 Log.e("PropertyFilter",o+"======"+s+"==============="+o1);  6                 if (s.equals("name")){  7                     return false;  8                 }else{  9                     return true; 10  } 11 
12  } 13  }); 14         Log.e("PropertyFilter",json);

 

設置name過濾   請看log日志

 

 

 

在介紹一種情況

定義了一個泛型類

里面有一個學生對象 和一個字符串

把對象轉json

當我們要把這個json轉為對象的時候問題就來了

這時候就需要實現TypeReference類 把對象封裝一下

 

完美解決  凡是帶泛型的都可以使用TypeReference

 

最后給大家介紹一個網站 http://json.cn/   特別強大 會自動格式化json   如果有語法錯誤也會報錯滴

 

 


免責聲明!

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



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