这是什么啊

15.java json解析

json解析,
json:一种数据格式:
{名值对,名值名}--》一个json对象:JSONObject-->java的一个对象/map
[{},{},{}]-->一组json对象:JSONArray--->List:java的对象 ,List<map>
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
<font size = 5 face = "华文彩云">女生说:大海啊目前,男生说:大海啊丈母娘</font>
xml的语法:
1.标签是成对出现的。有开始标签,结束标签。单标签除外
2.区分大小写。
3.标签中嵌套标签
<tag1>
<tag2>
</tag2>
</tag1>
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<Student> list = gson.fromJson(json2,new TypeToken<List<Student>>() {}.getType());
~~fastjson~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List<Student> list = JSON.parseArray(json2, Student.class);
Student stu = JSON.parseObject(json1, Student.class);
~~~~JSON~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JSONObject js = new JSONObject(json);
JSONArray jss = js.optJSONArray("info");
posted @ 2015-12-03 22:35  陈旭缘  阅读(181)  评论(0编辑  收藏  举报
这是什么