用习惯了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的标签,火星上的同事会知道我的村民坐的是哪艘船。所有工序完成。


代码如下。

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 blocke.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 blocke.printStackTrace();}return jsonData;}private void writeData(String jsonData) {// TODO Auto-generated method stubtry {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 blocke.printStackTrace();}}}

愉快的时间总是过的特别快,村民们要回家了。这时候来了一辆宇宙飞船,上面挂着我临走时贴上的标签,看来是相亲门回家了。(得到了JSONarray的对象)。打开舱门,乡亲们陆陆续续的走了下来,我为每个人做了次详细的检查,保证不会让奇怪的生物混进来,乡亲们神清气爽的重回地球表面。(循环中取出JSONArray中的JSON对象,并装填到我们自己的对象中,并存入arraylist)

继续代码

public class MyJsonReader {String jsonData;//ArrayList<Folk> folks;public MyJsonReader(String jsonData){this.jsonData=jsonData;}public ArrayList<Folk> getJsonData(){ArrayList<Folk> folks=new ArrayList<Folk>();try {JSONObject jsonObject=new JSONObject(jsonData);JSONArray jsonArray=jsonObject.getJSONArray("vallage");int len = jsonArray.length();for(int i=0;i<jsonArray.length();i++){JSONObject json=jsonArray.getJSONObject(i);Folk folk=new Folk();folk.setName(json.optString("name"));folk.setAge(json.optString("age"));folk.setCareer(json.optString("career"));folk.setSalary(json.optInt("salary"));folk.setSex(json.optString("sex").equals("male")?true:false);folks.add(folk);}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}return folks;}}

JSON的读写在android很简单,出奇的简单,总的来说还有些小地方需要注意 。
JSONArray中添加json对象的方法不是用的add而是put 。

jsonData=new JSONStringer().object().key("vallage").value(array).endObject().toString();



工程资源: http://download.csdn.net/detail/etzmico/3732745

更多相关文章

  1. android中的内部类
  2. Activity之间的相互调用与传递参数
  3. Android之封装好的异步网络请求框架
  4. Android(安卓)序列化对象接口Parcelable使用方法
  5. Android柱状图MPAndroidChart使用
  6. Android开发-面向对象的数据库Db4o
  7. 《二》Android(安卓)数据库 SQlite SQLiteOpenHelper
  8. 常用方法(1)------根据图片的url路径获得Bitmap对象
  9. Android实现高斯模糊

随机推荐

  1. %1$s %1$d Android string (java & Androi
  2. Android学习札记51:在TextView显示插入的
  3. android单元测试用例和日志输出
  4. Android移动开发
  5. android文字滚动
  6. [Android TV] 1 初识TV apps
  7. 在Android中扫描wifi热点演示实例教程
  8. android > WebView > 获取表单数据
  9. 【Android-View】Android(安卓)View控相
  10. ADB(Adriod Debug bridge) 启动 和关闭