Json和xmlpullparser解析的联系和区别

最近接触了网络解析,而解析一般分为xml解析和json解析,xml解析中用的 比较多的则是pull解析。在这几天的接触中,遇到了许多问题,在解决的过程中也颇费周折。现在将一部分内容和解决方案记录下来,方便自己以后查阅,另外希望对新手有一定的帮助。


一、接下来先说下几个个的共同点
1、不管是什么解析首先都需要获得含有需要解析的内容的字符串(xml里面的是InputStream类型),然后来解析。(网络内容可以通过httpget请求来获得,本地的可以通过文件操作读入)


2、将1里面获得数据拿来就可以开始进行解析了  (假设获得的内容为result的变量,类型参考1)

            数据源:(模拟网址)
                             String url="http://weather.xcyh.org/*****";


                           
             xml获得数据

//这段代码如果写到工具类中,传输的inputstream类型可能报错,是因为inputstream导包错,确认导入io包下的就对了
                            InputStream Result=null;                                                                                                                                                                                                                                                
HttpClient httpclient=new DefaultHttpClient();
HttpGet httpget=new HttpGet(url);
HttpResponse response=httpclient.execute(httpget);
int responsecode=response.getStatusLine().getStatusCode();
if(responsecode==200){
HttpEntity entity=response.getEntity();
Result=entity.getContent();
}
json获得数据
                          
                           String Result=null;
                           HttpClient httpclient=new DefaultHttpClient();
HttpGet httpget=new HttpGet(url);
try {
HttpResponse response=httpclient.execute(httpget);
int responseCode=response.getStatusLine().getStatusCode();
if(responseCode==200){
HttpEntity entity=response.getEntity();
Result=EntityUtils.toString(entity);

}else{
Result="";
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}









3、根据获得的数据,生成解析内容的操作对象
             xml获得解析内容的操作对象
                            XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
XmlPullParser parser=factory.newPullParser();
InputStream in=xmlpulltools.getxmldate.getXmlData(url);
parser.setInput(in, "utf-8");
    
             
JSON获得解析内容的操作对象


                           //最外层的标签是这样的 {*****}
                           JSONObject obj=new JSONObject(Result);




                          //最外层的标签是这样的 [******]
           JSONArray objArray=new JSONArray(Result);


                         在json中,内层需要获得操作对象的时候,需要上一层级的操作对象根据需要来调用getJSONObject(key);和getJSONArray(key);来生成。
                                   JSONObject zobj=obj(或者objArray).getJSONObject(key);
                                   JSONArray zobjArray=obj(或者objArray).getJSONArray(key);
                               




4、根据要解析的内容生成实体类的对象


            




5、解析






二、解析中的一些问题及解决办法


1、xmlpull解析中的gettext(); 和nexttext();  的用法区别


     a 、<b b_id="12">lady</d>  注意:"lady"可以是空
     在解析的过程中当前位置是XmlPullParser.START_TAG  的时候,可以通过nexttext();获得lady,但是</d>将会被跳过,不会被位置标签标记即XmlPullParser.END_TAG下不会出现d;如果用gettext();方法,此时无法获得lady,将获得空值。可以在


XmlPullParser.TEXT下使用gettext();此时不但可以获得lady,并且不会跳过结束标签,下次的当前标签就是</d>
     
     
2、json中的问题及解决:
    ["key"]  not  found   说明没有找到该关键字,有可能自己写成了关键字,还有一种情况就是有时候获得的json里,有几个对象存在该关键字,有些没有该关键字。 解决方案就是在生成该对象前进行判断。
    if(obj.has("vid")){
fc.setVid(fobj.getString("vid"));
    }


   
3、json生成对象的规律
    {}创建实体类对象
    [{},{}]创建实体类数组
    ["","",]创建字符串数组





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值