android中将复杂json对象进行数据转换

首先大家需要知道的是android集成了apache client和json处理相关的函数,大家可直接调用


1、一般的json对象服务器端都会进行封装成比较简单的基础pojo,但是有些时候我们会在基础的POJO中内部创建私有对象属性例如如下状况,我省略了get和set方法了

  1. public class WugeVO implements Serializable{  
  2.       
  3.     private double score;  
  4.       
  5.     //相关基本数据   
  6.     private NameVO nameVO;  
  7.       
  8.     private SanCaiVO sanCaiVO;  
  9.       
  10.     //天格数理   
  11.     private ShuliVO tiangeShuli;  
  12.       
  13.     //人格数理   
  14.     private ShuliVO rengeShuli;  
  15.       
  16.     //地格数理   
  17.     private ShuliVO digeShuli;  
  18.       
  19.     //外格数理   
  20.     private ShuliVO waigeShuli;  
  21.       
  22.     //总格数理   
  23.     private ShuliVO zonggeShuli;  
  24.       
  25.     //变格数理   
  26.     private ShuliVO biangeShuli;  
  27.       
  28.     //性格的基础属性   
  29.     private String character_jianpi;  
  30.       
  31.     //性格的详细描述   
  32.     private String character_note;  
  33.       
  34.     private NameLiuqin nl;  
  35.       
  36.     //姓名组合   
  37.     private NameInfo nameInfo;  
  38.       
  39.     public String toString(){  
  40.         String tmp= this.nameVO.toString()+"/r/n"  
  41.         +this.sanCaiVO.toString()+"/r/n"  
  42.         +this.tiangeShuli.toString()+"/r/n"  
  43.         +this.rengeShuli.toString()+"/r/n"  
  44.         +this.digeShuli.toString()+"/r/n"  
  45.         +this.waigeShuli.toString()+"/r/n"  
  46.         +this.zonggeShuli.toString()+"/r/n"  
  47.         +this.biangeShuli.toString()+"/r/n"  
  48.         +this.character_jianpi+"/r/n"  
  49.         +this.character_note+"/r/n"  
  50.         +this.nl.toString()+"/r/n"  
  51.         +this.nameInfo.toString()+"/r/n"  
  52.         +this.score+"/r/n";  
  53.           
  54.           
  55.         return tmp;  
  56.     }  

2、这个时候如果返回这样一个json对象,处理起来就比较复杂了。核心难度在于并不是简单的key-value形式了。那我们就要充分发挥客户端JSONObject的实力了

(1)、先将json字符串转成json对象:

  1. Json2Name jn=new Json2Name(jsonstr);  


(2)、针对json对象进行json数据转换,转成本地对象,这里我贴出几个有代表性的不同深度的json键值如何获得

  1. try {  
  2.             this.score=jsb.getDouble("score");  
  3.         } catch (JSONException e2) {  
  4.             e2.printStackTrace();  
  5.         }  
  6.         try {  
  7.             this.type=jsb.getJSONObject("nameVO").getString("type");  
  8.         } catch (JSONException e1) {  
  9.             e1.printStackTrace();  
  10.         };  
  11.           
  12.         try {  
  13.             this.xf_ft=jsb.getJSONObject("nameVO").getJSONObject("xfDic").getString("fanti");  
  14.         } catch (JSONException e) {  
  15.             e.printStackTrace();  
  16.         }  
  17.         try {  
  18.             this.xf_ft_bihua=jsb.getJSONObject("nameVO").getJSONObject("xfDic").getInt("ft_bihua");  
  19.         } catch (JSONException e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.         try {  
  23.             this.xf_jixiong=jsb.getJSONObject("nameVO").getJSONObject("xfDic").getString("jixiong");  
  24.         } catch (JSONException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.         try {  
  28.             this.xf_jt=jsb.getJSONObject("nameVO").getString("xing_first");  
  29.         } catch (JSONException e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.         try {  
  33.             this.xf_jt_bihua=jsb.getJSONObject("nameVO").getJSONObject("xfDic").getInt("bihua");  
  34.         } catch (JSONException e) {  
  35.             e.printStackTrace();  
  36.         };  
  37.         try {  
  38.             this.xf_pinyin=jsb.getJSONObject("nameVO").getJSONObject("xfDic").getString("py");  
  39.         } catch (JSONException e) {  
  40.             e.printStackTrace();  
  41.         };  
  42.         try {  
  43.             this.xf_wuxing=jsb.getJSONObject("nameVO").getJSONObject("xfDic").getString("jixiong");  
  44.         } catch (JSONException e) {  
  45.             e.printStackTrace();  
  46.         };  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值