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 如果有語法錯誤也會報錯滴