json解析包(GSON谷歌、fastJson阿里、jacksonSpring内置)
移动端(安卓、IOS)通讯方式采用http协议+JSON格式 走restful风格。 很多互联网项目都采用Http协议+JSON xml比较重WebService服务
什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过JSON来进行交换。
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON的形式是用大括号“{}”包围起来的项目列表,每一个项目间用逗号(,)分隔,而项目就是用冒号(:)分隔的属性名和属性值。这是典型的字典表示形式,也再次表明javascript里的对象就是字典结构。不管多么复杂的对象,都可以用一句JSON代码来创建并赋值。在JSON中,名称 / 值对包括字段名称(在双引号中),后面写一个冒号,然后是值
JSON有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构 1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。 2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。 经过对象、数组2种结构就可以组合成复杂的数据结构了。
fastJSON--API
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
json解析、封装
//封裝json
User user=new User();
user.setId(1);
user.setName("明");
List<Item> list=new ArrayList<Item>();
Item item=new Item();
item.setEmailAddress("134387641X@qq.com");
item.setHomeAddress("成都");
list.add(item);
user.setItem(list);
System.out.println("封裝json"+new JSONObject().toJSONString(user));
//解析json
String str="{\"id\":1,\"item\":[{\"emailAddress\":\"134387641X@qq.com\",\"homeAddress\":\"成都\"}],\"name\":\"明\"}";
JSONObject jsonObject = new JSONObject();
JSONObject parseObject = jsonObject.parseObject(str);
Integer id = parseObject.getInteger("id");
String name = parseObject.getString("name");
JSONArray jsonArray = parseObject.getJSONArray("item");
System.out.println(id+"===="+name);
for(Object obj:jsonArray) {
JSONObject obj2 =(JSONObject) obj;
String emailAddress = obj2.getString("emailAddress");
String homeAddress = obj2.getString("homeAddress");
System.out.println(emailAddress+"----"+homeAddress);
}
XML解析
什么是XML? 它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。 XML 全称为可扩展的标记语言。主要用于描述数据和用作配置文件。 XML 文档在逻辑上主要由一下 5 个部分组成: XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息 文档类型声明:指出 XML 文档所用的 DTD 元素:由开始标签、元素内容和结束标签构成 注释:以结束,用于对文档中的内容起一个说明作用 处理指令:通过处理指令来通知其他应用程序来处理非 XML 格式的数据,格式为 XML 文档的根元素被称为文档元素,它和在其外部出现的处理指令、注释等作为文档实体的子节点,根元素本身和其内部的子元素也是一棵树。
@Test
public void testXML() throws IOException, DocumentException {
SAXReader saxReader=new SAXReader();
Document read = saxReader.read(new File("D:\\Eclipse\\WorkSpace\\mavendemo\\src\\main\\resources\\student.xml"));
Element rootElement = read.getRootElement();
gitNodes(rootElement);
}
private void gitNodes(Element rootElement) {
System.out.println("节点名称"+rootElement.getName());
@SuppressWarnings("unchecked")
List<Attribute> attributes = rootElement.attributes();
for(Attribute as:attributes){
System.out.println("属性"+as.getName()+"---"+"属性值"+as.getText());
}
if(!rootElement.equals("")){
System.out.println("标签属性"+rootElement.getName()+"---"+"标签内容"+rootElement.getText());
}
// 使用迭代器遍历
Iterator<Element> elementIterator = rootElement.elementIterator();
while (elementIterator.hasNext()) {
Element next = elementIterator.next();
gitNodes(next);
}
}
XML解析方式?
Dom4j、Sax、Pull
Dom4j与Sax区别
dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。