您的位置:首页 > Web前端 > JavaScript

Json和xmlpullparser解析的联系和区别

2015-01-20 10:44 393 查看
最近接触了网络解析,而解析一般分为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生成对象的规律

{}创建实体类对象

[{},{}]创建实体类数组

["","",]创建字符串数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: