用習慣了XML,總覺得JSON可讀性又差,也不好保存等等,到真正接觸了,才發現在Android上,JSON就像親兒子一樣容易管教。
還是先看數據源,數據源我采用的是一系列的村民集合,村民的屬性如下。
- public class Folk {
- String name;
- String career;
- String age;
- int salary;
- boolean sex;
- }
先看寫數據,數據是我假定一個村的數據,由一個arraylist填裝。通過一個for循環很容易取出了arraylist中的每個對象以及其數據,每個對象,即村民都可以生成一個JSONobject,這裡json和java面向對象的思想是多麼吻合。prey load!
其次還有一個JSONarray對象,就是一個JSON自己的Arraylist。好比我們把自己的對象轉存到一個Json對象中,從我們的Arraylist中取出來,再裝進一個Json的Arraylist。好比我把一個個村名從一輛大卡車上接下來(從自己的ArrayList取),把他們穿戴整齊了(裝進Json對象中),再揮揮手把他們送上火星游的太空飛船(jsonArray),臨走我在飛船上掛上了village的標簽,火星上的同事會知道我的村民坐的是哪艘船。所有工序完成。
本文源碼下載:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /pub/Android源碼集錦/2011年/12月/Android開發:JSON數據的讀寫方法 /
代碼如下。
- public class MyJsonWriter {
- ArrayList<Folk> folks;
- File saveFile;
- public MyJsonWriter(ArrayList<Folk> folks){
- this.folks=folks;
- }
-
- public void setFilePath(String filepath){
- saveFile=new File(filepath);
- try {
- saveFile.createNewFile();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- public String getJsonData(){
- String jsonData = null;
- // String jsonData=new JSONStringer().object().key("village").value("abc").endObject().toString();
- try {
- StringBuilder builder=new StringBuilder();
- ArrayList<String> folksData=new ArrayList<String>();
- JSONArray array=new JSONArray();
- for(int i=0;i<folks.size();i++){
- Folk folk=folks.get(i);
- JSONObject jsonObject=new JSONObject();
- jsonObject.put("name", folk.getName());
- jsonObject.put("sex", folk.isSex()?"male":"female");
- jsonObject.put("age", folk.getAge());
- jsonObject.put("career", folk.getCareer());
- jsonObject.put("salary", folk.getSalary());
- folksData.add(jsonObject.toString());
- array.put(jsonObject);
- }
- // JSONArray jsonArray=new JSONArray(folksData);
- int len = array.length();
- jsonData=new JSONStringer().object().key("vallage").value(array).endObject().toString();
- System.out.println(jsonData);
- writeData(jsonData);
- } catch (JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return jsonData;
- }
-
- private void writeData(String jsonData) {
- // TODO Auto-generated method stub
- try {
- BufferedReader reader=new BufferedReader(new StringReader(jsonData));
- BufferedWriter writer=new BufferedWriter(new FileWriter(saveFile));
- int len=0;
- char[] buffer=new char[1024];
- while((len=reader.read(buffer))!=-1){
- writer.write(buffer, 0, len);
- }
- writer.flush();
- writer.close();
- reader.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }