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生成对象的规律
{}创建实体类对象
[{},{}]创建实体类数组
["","",]创建字符串数组
一、接下来先说下几个个的共同点
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生成对象的规律
{}创建实体类对象
[{},{}]创建实体类数组
["","",]创建字符串数组
相关文章推荐
- xmlpullparser解析json文件
- android XmlPullParser解析xml
- android xml解析 XmlPullParser的使用
- 安卓中使用XmlPullParser解析xml文件
- XmlPullParser解析XML文件
- Android 解析XML文件 XmlPullParser 方法
- Android解析XML之XmlPullParser
- android xml解析 XmlPullParser的使用
- 使用Xml类下的newPullParser ()、newSerializer ()方法,解析xml数据和序列化生成xml数据
- 五十四、android解析xml和json区别
- android解析xml和json区别
- XML文件解析,用XmlPullParser解析MXL
- Android的pull解析xml区别
- xml文件下载到本地—XmlPullParser解析下载到本地的xml(vlc)
- XmlPullParser.nextText() bug 好文章,使用pull解析xml注意
- JSON与XML的区别与联系
- bak 6.android xml解析 XmlPullParser的使用.
- Android解析XML(PULL方式)和JSON 工作原理和实现过程(详细代码)
- android xml解析 XmlPullParser的使用
- android中用XmlPullParser解析XML文件,以及res/raw和assets的不同