用习惯了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的标签,火星上的同事会知道我的村民坐的是哪艘船。所有工序完成。
本文源码下载:
具体下载目录在 /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(); } } }