json解析,

json:一种数据格式:

{名值对,名值名}--》一个json对象:JSONObject-->java的一个对象/map

[{},{},{}]-->一组json对象:JSONArray--->List:java的对象 ,List

3种解析方式:

1.原生:

new JSONObject(json)-->java

new JSONArray(json)-->遍历:获取每一个JSONObject,-->java

2.Gson:

gson.fromJson(json,Class)--》{}

gson.fromJson(json,TypteToken(){}.getType())--->[] ,List<>

3.fast-json:

JSON.parseObject(json,Class);

JSON.parseArray(json,Class);

作业:

本堂课笔记:

xml:eXtended Markup Language

女生说:大海啊目前,男生说:大海啊丈母娘

xml的语法:

1.标签是成对出现的。有开始标签,结束标签。单标签除外

2.区分大小写。

3.标签中嵌套标签

Pull

以事件常量的方法进行解析。事件的类型,手动获取。

解析原理:当开始解析一个xml文件的时候,扫描器,向后逐渐扫描。遇到响应的内容,触发响应的事件。手动获取下次的事件类型

5个事件:对应的常量(数值)

开始解析文档事件:START_DOCUMENT:0

结束解析文档事件:END_DOCUMENT:1

开始解析标签事件:STATT_TAG:2

结束解析标签事先:END_TAG:3

文本事件:(无标签名)TEXT:4

nextText()

获取该标签后的文本内容,并且跳过响应的结束标签。

Sax:以事件通知的方法进行解析。用方法

借助:Handler

5个事件:对应的5个方法

开始解析文档事件:void startDocument()

相应操作:创建集合

结束解析文档事件: void endDocument()

无操作

开始解析标签事件:void startElement(String uri, String localName, String qName, Attributes attributes)

相应操作:

1.将qName扩为成员变量--->tagName

2.判断qName的值为:user,创建对象

结束解析标签事件:void endElement(String uri, String localName, String qName)

相应操作:

1.将tagName的值清空

2.判断qName的值:user,加入集合

文本事件:void characters(char[] ch, int start, int length)

相应操作:

1.获取文本内容:

content = new String(ch,start,length);

2.根据tagName的值,将content赋值个相应的属性。

总结xml的解析方式

方法一:PULL解析(拉取):特点,是手动的拉取下次的解析事件。(可以停止)

原理:基于事件,对应的常量。解析器对象,开始解析文档,遇到相应的事件,得到常量数值,判断该常量,响应的处理。

开始文档:START_DOCUMENT:0

结束文档:END_DOCUMENT:1

开始标签:START_TAG:2

结束标签:END_TAG:3

文本标签:TEXT:4

操作步骤:

step1:创建javabean类

step2:获取解析器的工厂

XMLPullParserFactory factory = XMLPullParserFactory.newInstance();

step3:从工厂对象中获取解析器对象

XMLPullParser parser = factory.newPullParser();

step4:为解析器对象,设置要解析的文件:InputStream,encoding/Reader

step5:解析

A:获取首次的事件类型

B:大大的循环

while(eventType!=结束文档){

C:获取标签名

D:switch(事件类型){

case 开始标签

users:创建集合

user:创建对象,可能获取属性

name:nextText()

case 结束标签

user:将对象-->集合中,对象置空

}

E:手动获取下次的事件类型

eventType = parser.next();

}

常用方法:

getEventType();//首次获取解析器处理的事件

nextText();//获取该标签后的文本内容,同时跳过对应的结束标签

next();//获取下次的事件类型

SAX解析:基于事件通知(自动调用回调方法,某一个事件发生的时候,回调方法自动执行)

开始文档:startDocument()--->创建集合

结束文档:endDocument()--->

开始标签:startElement()--->tagName = qName;user,创建对象

结束标签:endElement()--->tagName ="",user,对象存入集合

文本标签:characters()--->获取文本内容,根据tagName的值,为对象的属性赋值

xml和json

~~Gson~~~~~~~~~~~~~~~~~

Student s1 = gson.fromJson(json1, Student.class);

List list = gson.fromJson(json2,new TypeToken>() {}.getType());

~~fastjson~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

List list = JSON.parseArray(json2, Student.class);

Student stu = JSON.parseObject(json1, Student.class);

~~~~JSON~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

JSONObject js = new JSONObject(json);

JSONArray jss = js.optJSONArray("info");