xml和json解析
2016-06-26 12:09
459 查看
Java 支持的xml的Dom解析
将整个xml读入内存,形成一个Document()对象(倒挂的树)即分支结构。对于大文档读入内存的话很占内存,不建议使用,而对于小文档,操作简单,还可以方便的对内存中的文档增删改查节点。
Java 支持的xml的SAX解析
一边读xml文档,一边解析文档。不适合对文档的增删改查。
例子:
Xml文件
<?xmlversion="1.0"encoding="UTF-8"?>
<!-- xml是父节点包含子节点,文本节点 -->
<!-- xml文件中的所有内容都是节点,有文本节点,元素节点 -->
<studentlist><!--节点名 -->
<studentid="1"><!--这是一个元素节点,包含的都是他的子节点,这是学生一
student是节点名,id是该节点的属性名,1是该学生的编号 本行中‘>’后面有一个换行的文本子节点 文本节点只有内容没有标题
-->
<name>张三</name><!--
name是元素节点 张三是文本节点,</name>和<grade>之间还有一个换行的文本节点。
-->
<grade>六年级</grade>
</student>
</sutdentlist>
//解析文件需要获取解析文件的流或位置///该解析方法可以理解为一层一层的循环。每层循环是一个子节点的循环,首先一定有元素节点,通过元素节点拿到节点集合,在循环拿其子节点。找元素节点通过逐层循环节点最终拿到文本节点。
public List<Student>paseDome(InputStreamin){
List<Student>studnet=null;
try{
//3c包的接口Document可以操作xml文档的节点。
DocumentBuilderbuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
//Document document=builder.parse(file);//通过builder对象的pase方法获取document对象。pase的参数可以是File即xml文档的位置或者输入流
Documentdocument=builder.parse(in);//Documnet就代表了存入内存中的文件。拿到Document就可以拿到对应节点,然后就可以对xml增删改查。
NodeListlist=document.getElementsByTagName("studnet");//Element元素//xml中的每个节点就是一个元素,例如<student
id="1"><!-- 这是学生一 student是节点名,id是该节点的属性名,1是该学生的编号--><student><name>张三</name><grade>六年级</grade></student>其中student代表一个元素,这个元素包含姓名和年级,而name又是一个元素。nodelist也是一个list
studnet=newArrayList<Student>();
for(inti=0;i<list.getLength();i++){
Studentstud=newStudent();
Elementelement=(Element) list.item(i);//item(i)方法返回Node节点类型
3c包的接口Element元素节点是node的子类
stud.id=Integer.valueOf(element.getAttribute("id"));//Attribute是属性,通过属性名拿到属性值
NodeListlists=element.getChildNodes();//获取元素节点的子节点,子节点有多个返回结果是节点集合。其中的左右孩子节点的集合
for([b]intj=0;j<lists.getLength();i++){
//getNodeType()short类型 Node.ELEMENT_NODE元素节点
if(lists.item(j).getNodeType()==Node.ELEMENT_NODE){
if(lists.item(j).getNodeName().equals("name")){
stud.name=lists.item(j).getFirstChild().getNodeValue();//循环到最终的文本节点,最终的文本节点
}elseif(lists.item(j).equals("grade")){
stud.grade=lists.item(j).getFirstChild().getNodeValue();
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return studnet;
}
Android的 xml文档的Pull解析
该解析方式是内嵌到开发包的,Android的资源文件通过pull解析,解析资源的xml文件。该解析方式也是一边读取文档一边解析文档。
//pull解析实现
public List<Student>pull(InputStream in){
List<Student>studnets=null;
try {
XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
XmlPullParserparser=factory.newPullParser();//获取xmlpull解析的实体类
parser.setInput(in,"UTF-8");//设置所解析xml文件的输入流,及解析成的格式
intevent=parser.getEventType();//获取事件
Studentstudent=null;
//当事件不是解析到文档结尾时,就循环解析
while(event!= XmlPullParser.END_DOCUMENT){
StringnodeName=parser.getName();//一边输入一边读取,每次读取一个节点
switch(event){
case XmlPullParser.START_DOCUMENT://开始读取xml文档
studnets=newArrayList<JSONjiexi.Student>();
case XmlPullParser.START_TAG://
标签开始
if("person".equals(nodeName)){
student=new Student();
student.id=Integer.parseInt(parser.getAttributeValue(0));
}
if("name".equals(nodeName)){
student.grade=parser.nextText();//获取下一个文本节点
}
break;
case XmlPullParser.END_TAG://
标签结束
if("person".equals(nodeName)){
studnets.add(student);
student=null;
}
break;
}
event=parser.next();//进入下一个标签
}
}catch(Exception e) {
e.printStackTrace();
}
returnstudnets;
}
Json解析
Json是一种轻量级的数据交换格式,主要有json对象和json数组,我们可以将json形式的字符串转变为json对象({}开头结尾组成的)或json数组(单独[]组成的)。Json数据是一系列的键值对的集合。
JsonObject对象以‘{’‘}’包裹。其中是一个一个的键值对以key:value形式存在,key只能是String类型,value可以是String、Number、Boolean、null、JsonArray甚至是JsonObject对象,每个键值对以,分隔。
JsonArray又称为有序列表,被理解为数组被‘[’‘]’包裹。数组中的元素可以是String、Number、Boolean、null、JsonObject、或者JsonArray对象,数组中的每个元素,使用逗号分隔。
Json数据打包
Android提供的Json解析类都在org.json下,主要有以下几个:
(1) JsonObject:Json对象,键值对形式
(2) JsonArray :有序数值,用toString()函数可以转换为用方括号包裹的有序表字符串
(3) JsonTokener:Json解析类
例子:
{
“name”:”xxx”,
“age”:21,
“address”:{
“country”:”China”
“province”:”Chongqin”
},
“phone”:[“1234”,”333”],
“married”:false
}
创建上面的代码是
//自定义JsonObject对象
public
void getdata(){
object=newJSONObject();
try {
object.put("name","xxx");
object.put("age",21);
JSONObjectaddress=newJSONObject();
address.put("count","China");
address.put("province","Chongqin");
object.put("address",address);
JSONArraynumber=newJSONArray();
number.put("1234");
number.put("333");
object.put("phone",number);
object.put("married",false);
}catch(JSONException e) {
e.printStackTrace();
}}
将整个xml读入内存,形成一个Document()对象(倒挂的树)即分支结构。对于大文档读入内存的话很占内存,不建议使用,而对于小文档,操作简单,还可以方便的对内存中的文档增删改查节点。
Java 支持的xml的SAX解析
一边读xml文档,一边解析文档。不适合对文档的增删改查。
例子:
Xml文件
<?xmlversion="1.0"encoding="UTF-8"?>
<!-- xml是父节点包含子节点,文本节点 -->
<!-- xml文件中的所有内容都是节点,有文本节点,元素节点 -->
<studentlist><!--节点名 -->
<studentid="1"><!--这是一个元素节点,包含的都是他的子节点,这是学生一
student是节点名,id是该节点的属性名,1是该学生的编号 本行中‘>’后面有一个换行的文本子节点 文本节点只有内容没有标题
-->
<name>张三</name><!--
name是元素节点 张三是文本节点,</name>和<grade>之间还有一个换行的文本节点。
-->
<grade>六年级</grade>
</student>
</sutdentlist>
//解析文件需要获取解析文件的流或位置///该解析方法可以理解为一层一层的循环。每层循环是一个子节点的循环,首先一定有元素节点,通过元素节点拿到节点集合,在循环拿其子节点。找元素节点通过逐层循环节点最终拿到文本节点。
public List<Student>paseDome(InputStreamin){
List<Student>studnet=null;
try{
//3c包的接口Document可以操作xml文档的节点。
DocumentBuilderbuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
//Document document=builder.parse(file);//通过builder对象的pase方法获取document对象。pase的参数可以是File即xml文档的位置或者输入流
Documentdocument=builder.parse(in);//Documnet就代表了存入内存中的文件。拿到Document就可以拿到对应节点,然后就可以对xml增删改查。
NodeListlist=document.getElementsByTagName("studnet");//Element元素//xml中的每个节点就是一个元素,例如<student
id="1"><!-- 这是学生一 student是节点名,id是该节点的属性名,1是该学生的编号--><student><name>张三</name><grade>六年级</grade></student>其中student代表一个元素,这个元素包含姓名和年级,而name又是一个元素。nodelist也是一个list
studnet=newArrayList<Student>();
for(inti=0;i<list.getLength();i++){
Studentstud=newStudent();
Elementelement=(Element) list.item(i);//item(i)方法返回Node节点类型
3c包的接口Element元素节点是node的子类
stud.id=Integer.valueOf(element.getAttribute("id"));//Attribute是属性,通过属性名拿到属性值
NodeListlists=element.getChildNodes();//获取元素节点的子节点,子节点有多个返回结果是节点集合。其中的左右孩子节点的集合
for([b]intj=0;j<lists.getLength();i++){
//getNodeType()short类型 Node.ELEMENT_NODE元素节点
if(lists.item(j).getNodeType()==Node.ELEMENT_NODE){
if(lists.item(j).getNodeName().equals("name")){
stud.name=lists.item(j).getFirstChild().getNodeValue();//循环到最终的文本节点,最终的文本节点
}elseif(lists.item(j).equals("grade")){
stud.grade=lists.item(j).getFirstChild().getNodeValue();
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return studnet;
}
Android的 xml文档的Pull解析
该解析方式是内嵌到开发包的,Android的资源文件通过pull解析,解析资源的xml文件。该解析方式也是一边读取文档一边解析文档。
//pull解析实现
public List<Student>pull(InputStream in){
List<Student>studnets=null;
try {
XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
XmlPullParserparser=factory.newPullParser();//获取xmlpull解析的实体类
parser.setInput(in,"UTF-8");//设置所解析xml文件的输入流,及解析成的格式
intevent=parser.getEventType();//获取事件
Studentstudent=null;
//当事件不是解析到文档结尾时,就循环解析
while(event!= XmlPullParser.END_DOCUMENT){
StringnodeName=parser.getName();//一边输入一边读取,每次读取一个节点
switch(event){
case XmlPullParser.START_DOCUMENT://开始读取xml文档
studnets=newArrayList<JSONjiexi.Student>();
case XmlPullParser.START_TAG://
标签开始
if("person".equals(nodeName)){
student=new Student();
student.id=Integer.parseInt(parser.getAttributeValue(0));
}
if("name".equals(nodeName)){
student.grade=parser.nextText();//获取下一个文本节点
}
break;
case XmlPullParser.END_TAG://
标签结束
if("person".equals(nodeName)){
studnets.add(student);
student=null;
}
break;
}
event=parser.next();//进入下一个标签
}
}catch(Exception e) {
e.printStackTrace();
}
returnstudnets;
}
Json解析
Json是一种轻量级的数据交换格式,主要有json对象和json数组,我们可以将json形式的字符串转变为json对象({}开头结尾组成的)或json数组(单独[]组成的)。Json数据是一系列的键值对的集合。
JsonObject对象以‘{’‘}’包裹。其中是一个一个的键值对以key:value形式存在,key只能是String类型,value可以是String、Number、Boolean、null、JsonArray甚至是JsonObject对象,每个键值对以,分隔。
JsonArray又称为有序列表,被理解为数组被‘[’‘]’包裹。数组中的元素可以是String、Number、Boolean、null、JsonObject、或者JsonArray对象,数组中的每个元素,使用逗号分隔。
Json数据打包
Android提供的Json解析类都在org.json下,主要有以下几个:
(1) JsonObject:Json对象,键值对形式
(2) JsonArray :有序数值,用toString()函数可以转换为用方括号包裹的有序表字符串
(3) JsonTokener:Json解析类
例子:
{
“name”:”xxx”,
“age”:21,
“address”:{
“country”:”China”
“province”:”Chongqin”
},
“phone”:[“1234”,”333”],
“married”:false
}
创建上面的代码是
//自定义JsonObject对象
public
void getdata(){
object=newJSONObject();
try {
object.put("name","xxx");
object.put("age",21);
JSONObjectaddress=newJSONObject();
address.put("count","China");
address.put("province","Chongqin");
object.put("address",address);
JSONArraynumber=newJSONArray();
number.put("1234");
number.put("333");
object.put("phone",number);
object.put("married",false);
}catch(JSONException e) {
e.printStackTrace();
}}
相关文章推荐
- asp对复杂json的解析一定要注意要点
- JSON序列化与解析原生JS方法且IE6和chrome测试通过
- Android 解析JSON对象及实例说明
- 收集json解析的四种方法分享
- JavaWEB.xml解析技术SAX&DOM(学习笔记)
- XML解析之DOM解析
- Android中JSON数据的解析
- pull解析器解析xml
- java代码解析json对象获取json对象属性值
- XML的四大解析方式浅析
- 学习json post请求和json解析
- Android json详解
- swift JSON字符串解析 json parse / json decode
- json解析效率对比
- pull解析
- Android笔记三(网络技术)
- 什么是json以及json解析
- 使用DOM模型实现图片在div之间切换
- Cocos2d/x 解析服务器JSON数据
- Json与对象的相互转换