[/color]用习惯了XML,总觉得JSON可读性又差,也不好保存等等,到真正接触了,才发现在android上,JSON就像亲儿子一样容易管教。

还是先看数据源,数据源我采用的是一系列的村民集合,村民的属性如下。


Java代码
  1. publicclassFolk{
  2. Stringname;
  3. Stringcareer;
  4. Stringage;
  5. intsalary;
  6. booleansex;


引用
先看写数据,数据是我假定一个村的数据,由一个arraylist填装。通过一个for循环很容易取出了arraylist中的每个对象以及其数据,每个对象,即村民都可以生成一个JSONobject,这里json和java面向对象的思想是多么吻合。prey load!
其次还有一个JSONarray对象,就是一个JSON自己的Arraylist。好比我们把自己的对象转存到一个Json对象中,从我们的Arraylist中取出来,再装进一个Json的Arraylist。好比我把一个个村名从一辆大卡车上接下来(从自己的ArrayList取),把他们穿戴整齐了(装进Json对象中),再挥挥手把他们送上火星游的太空飞船(jsonArray),临走我在飞船上挂上了village的标签,火星上的同事会知道我的村民坐的是哪艘船。所有工序完成。

看代码


Java代码
  1. publicclassMyJsonWriter{
  2. ArrayList<Folk>folks;
  3. FilesaveFile;
  4. publicMyJsonWriter(ArrayList<Folk>folks){
  5. this.folks=folks;
  6. }
  7. publicvoidsetFilePath(Stringfilepath){
  8. saveFile=newFile(filepath);
  9. try{
  10. saveFile.createNewFile();
  11. }catch(IOExceptione){
  12. //TODOAuto-generatedcatchblock
  13. e.printStackTrace();
  14. }
  15. }
  16. publicStringgetJsonData(){
  17. StringjsonData=null;
  18. //StringjsonData=newJSONStringer().object().key("village").value("abc").endObject().toString();
  19. try{
  20. StringBuilderbuilder=newStringBuilder();
  21. ArrayList<String>folksData=newArrayList<String>();
  22. JSONArrayarray=newJSONArray();
  23. for(inti=0;i<folks.size();i++){
  24. Folkfolk=folks.get(i);
  25. JSONObjectjsonObject=newJSONObject();
  26. jsonObject.put("name",folk.getName());
  27. jsonObject.put("sex",folk.isSex()?"male":"female");
  28. jsonObject.put("age",folk.getAge());
  29. jsonObject.put("career",folk.getCareer());
  30. jsonObject.put("salary",folk.getSalary());
  31. folksData.add(jsonObject.toString());
  32. array.put(jsonObject);
  33. }
  34. //JSONArrayjsonArray=newJSONArray(folksData);
  35. intlen=array.length();
  36. jsonData=newJSONStringer().object().key("vallage").value(array).endObject().toString();
  37. System.out.println(jsonData);
  38. writeData(jsonData);
  39. }catch(JSONExceptione){
  40. //TODOAuto-generatedcatchblock
  41. e.printStackTrace();
  42. }
  43. returnjsonData;
  44. }
  45. privatevoidwriteData(StringjsonData){
  46. //TODOAuto-generatedmethodstub
  47. try{
  48. BufferedReaderreader=newBufferedReader(newStringReader(jsonData));
  49. BufferedWriterwriter=newBufferedWriter(newFileWriter(saveFile));
  50. intlen=0;
  51. char[]buffer=newchar[1024];
  52. while((len=reader.read(buffer))!=-1){
  53. writer.write(buffer,0,len);
  54. }
  55. writer.flush();
  56. writer.close();
  57. reader.close();
  58. }catch(IOExceptione){
  59. //TODOAuto-generatedcatchblock
  60. e.printStackTrace();
  61. }
  62. }
  63. }


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

上代码


Java代码
  1. publicclassMyJsonReader{
  2. StringjsonData;
  3. //ArrayList<Folk>folks;
  4. publicMyJsonReader(StringjsonData){
  5. this.jsonData=jsonData;
  6. }
  7. publicArrayList<Folk>getJsonData(){
  8. ArrayList<Folk>folks=newArrayList<Folk>();
  9. try{
  10. JSONObjectjsonObject=newJSONObject(jsonData);
  11. JSONArrayjsonArray=jsonObject.getJSONArray("vallage");
  12. intlen=jsonArray.length();
  13. for(inti=0;i<jsonArray.length();i++){
  14. JSONObjectjson=jsonArray.getJSONObject(i);
  15. Folkfolk=newFolk();
  16. folk.setName(json.optString("name"));
  17. folk.setAge(json.optString("age"));
  18. folk.setCareer(json.optString("career"));
  19. folk.setSalary(json.optInt("salary"));
  20. folk.setSex(json.optString("sex").equals("male")?true:false);
  21. folks.add(folk);
  22. }
  23. }catch(JSONExceptione){
  24. //TODOAuto-generatedcatchblock
  25. e.printStackTrace();
  26. }
  27. returnfolks;
  28. }
  29. }


JSON的读写在android很简单,出奇的简单,让我这个准备花一个周五下午的人后面变得十分蛋疼的来写日志。
总的来说还有些小地方需要注意
JSONArray中添加json对象的方法不是用的add而是put

Java代码
  1. jsonData=newJSONStringer().object().key("vallage").value(array).endObject().toString();


.object和endObject成对出现 这很像XML写里面的starttag和endtag
最后我将一些的村民数据做为了一个village json对象的value,真的把这个Json对象幻想成了一艘宇宙飞船。。。

更多相关文章

  1. Android(安卓)自定义EditText, 增加设置右边取消按钮的属性
  2. 真实可行的android 基站定位代码
  3. android如何对应用进行单元测试
  4. Android(安卓)之 内存管理
  5. Android作为客户端,PC作为服务端:实现网络通信
  6. 记android学习之路----android中对json数据的解析
  7. Android(安卓)中的TabHost控件的使用
  8. Android之实现滑动开关组件
  9. android Intent常见应用

随机推荐

  1. android 添加全局TouchPanel响应范例
  2. Android代码混淆
  3. android lint检查出现的问题
  4. Android(安卓)Handler Message 传递字符
  5. BaseAdapter
  6. android的动画实例
  7. Android中图片的放大和缩小源码
  8. Android(安卓)判断获取的时间是否是今天
  9. Android(安卓)Spinner控件的简单应用
  10. Android(安卓)7.0版本升级解析包错误