一、JSON解析
- 什么是JSON:JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
1.JSONObject
类型 : Number 数字型String 字符串型 Boolean 布尔型 Array 数组 Object 对象 null 空值
(1)JSON中不区分整数、小数等类型,而统一使用Number来存储数字。
(2)Array表示数组,以中括号"[]"括起来,元素之间以逗号分隔,元素可以为任意类型。
(3)Object表示对象,类似于C语言中的结构体,以花括号"{}"括起来,其元素要求为键值对,key必须为String类型的,而value则可为任意类型。key和value之间以":"表示映射关系,元素之间也是以逗号分隔。
import org.json.JSONObject;
public class JSONObjectSample {
public static void main(String[] args) {
createJson();
}
private static void createJson() {
JSONObject obj = new JSONObject();
obj.put("name", "John");
obj.put("sex", "male");
obj.put("age", 22);
obj.put("is_student", true);
obj.put("hobbies", new String[] {"hiking", "swimming"});
//调用toString()方法可直接将其内容打印出来
System.out.println(obj.toString());
}
}
2.Fastjson
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
- 将 Java 对象转换为 JSON 格式
public class Person {
@JSONField(name = "AGE")
private int age;
@JSONField(name = "FULL NAME")
private String fullName;
@JSONField(name = "DATE OF BIRTH")
private Date dateOfBirth;
public Person(int age, String fullName, Date dateOfBirth) {
super();
this.age = age;
this.fullName= fullName;
this.dateOfBirth = dateOfBirth;
}
// 标准 getters & setters
}
- 可以使用 JSON.toJSONString() 将 Java 对象转换换为 JSON 对象:
private List<Person> listOfPersons = new ArrayList<Person>();
@Before
public void setUp() {
listOfPersons.add(new Person(15, "John Doe", new Date()));
listOfPersons.add(new Person(20, "Janette Doe", new Date()));
}
@Test
public void whenJavaList_thanConvertToJsonCorrect() {
String jsonOutput= JSON.toJSONString(listOfPersons);
}
更多的使用说明和使用方法:
https://github.com/alibaba/fastjson
https://github.com/alibaba/fastjson/wiki
2.Gson
Gson的应用主要为toJson与fromJson两个转换函数,而在使用这种对象转换之前需先创建好对象的类别以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
详情请参考:
https://zh.wikipedia.org/wiki/Gson
对比:
- Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。 在使用这种对象转换之前,需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。 类里面只要有get和set方法,Gson完全可以实现复杂类型的json到bean或bean到json的转换,是JSON解析的神器
- FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。
- JsonObjec简单易用,无需额外jdk,对于复杂的json解析使用比较困难
2.XML解析
1.DOM解析:
优点:1、形成了树结构,有助于更好的理解、掌握,且代码容易编写。2、解析过程中,树结构保存在内存中,方便修改。
缺点:1、由于文件是一次性读取,所以对内存的耗费比较大。2、如果XML文件比较大,容易影响解析性能且可能会造成内存溢出。
2.SAX解析:
优点:1、采用事件驱动模式,对内存耗费比较小。2、适用于只处理XML文件中的数据时。
缺点:1、编码比较麻烦。2、很难同时访问XML文件中的多处不同数据。
3.PULL解析:
Pull比DOM要好 ,Pull简洁Pull解析的方式是同步的
3.总结:
- 内存占用:SAX、Pull比DOM要好;
- 编程方式:SAX采用事件驱动,在相应事件触发的时候,会调用用户编好的方法,也即每解析一类XML,就要编写一个新的适合该类XML的处理类。DOM是W3C的规范,Pull简洁。
- 访问与修改:SAX采用流式解析,DOM随机访问。
- 访问方式:SAX,Pull解析的方式是同步的,DOM逐字逐句。
网友评论