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
    评论
Android中将HTML转换JSON需要使用第三方的库来实现。以下是一个示例代码,演示如何使用jsoup库来解析HTML并将其转换JSON格式: ```java // 引入jsoup库 implementation 'org.jsoup:jsoup:1.14.2' String htmlStr = "<html><head><title>Test</title></head><body><div><p>Hello World!</p></div></body></html>"; try { // 将HTML字符串解析为Document对象 Document doc = Jsoup.parse(htmlStr); // 遍历Document对象中的所有元素,并转换JSONObject对象 JSONObject json = new JSONObject(); Element root = doc.child(0); JSONObject jsonRoot = new JSONObject(); json.put(root.tagName(), jsonRoot); for (Element e : root.getAllElements()) { if (!e.tagName().equals(root.tagName())) { JSONObject jsonElem = new JSONObject(); jsonElem.put("text", e.text()); for (Attribute attr : e.attributes()) { jsonElem.put(attr.getKey(), attr.getValue()); } if (jsonRoot.has(e.tagName())) { JSONArray jsonArr = jsonRoot.getJSONArray(e.tagName()); jsonArr.put(jsonElem); } else { JSONArray jsonArr = new JSONArray(); jsonArr.put(jsonElem); jsonRoot.put(e.tagName(), jsonArr); } } } // 打印转换后的JSON对象 Log.d("JSON", json.toString()); } catch (JSONException e) { e.printStackTrace(); } ``` 在上述示例代码中,首先将HTML字符串解析为一个Document对象,然后遍历Document对象中的所有元素,并将每个元素转换为一个JSONObject对象。具体来说,通过getAllElements方法获取所有元素,然后将元素的标签名作为JSONObject对象的键,将元素的文本和属性作为JSONObject对象的值。如果有多个同名的元素,将它们放在一个JSONArray对象中。最后将所有JSONObject对象放在一个大的JSONObject对象中,并打印出来。需要注意的是,由于HTML的结构和元素类型比较复杂转换过程中需要根据具体情况进行一些特殊处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值