1. 前言
1.1.FastJson 的介绍:
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. 主要采用键值对 ({"name": "json"}) 的方式来保存和表示数据. JSON 是 JS 对象的字符串表示法, 它使用文本表示一个 JS 对象的信息, 本质上是一个字符串.
JSON 的处理器有很多, 这里我介绍一下 FastJson,FastJson 是阿里的开源 JSON 解析库, 可以解析 JSON 格式的字符串, 支持将 Java Bean 序列化为 JSON 字符串, 也可以从 JSON 字符串反序列化到 JavaBean. 是一个极其优秀的 JSON 框架, GitHub 地址: FastJson https://github.com/alibaba/fastjson
1.2.FastJson 的特点:
1.FastJson 数度快, 无论序列化和反序列化, 都是当之无愧的 fast
2. 功能强大(支持普通 JDK 类包括任意 Java Bean Class,Collection,Map,Date 或 enum)
3. 零依赖(没有依赖其它任何类库)
1.3.FastJson 的简单说明:
FastJson 对于 JSON 格式字符串的解析主要用到了下面三个类:
1.JSON:fastJson 的解析器, 用于 JSON 格式字符串与 JSON 对象及 javaBean 之间的转换
2.JSONObject:fastJson 提供的 JSON 对象
3.JSONArray:fastJson 提供 JSON 数组对象
2.FastJson 的用法
首先定义三个 JSON 格式的字符串
- //JSON 字符串 - 简单对象型
- private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";
- //JSON 字符串 - 数组类型
- private static final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
- // 复杂格式 JSON 字符串
- private static final String COMPLEX_JSON_STR = "{\"teacherName\":\"crystall\",\"teacherAge\":27,\"course\":{\"courseName\":\"english\",\"code\":1270},\"students\":[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]}";
2.1.JSON 格式字符串与 JSON 对象之间的转换
2.1.1.JSON 字符串 - 简单对象型与 JSONObject 之间的转换
- /**
- * JSON 字符串 - 简单对象型到 JSONObject 的转换
- */
- @Test
- public void testJSONStrToJSONObject() {
- JSONObject jsonObject = JSONObject.parseObject(JSON_OBJ_STR);
- System.out.println("studentName:" + jsonObject.getString("studentName") + ":" + "studentAge:"
- + jsonObject.getInteger("studentAge"));
- }
- /**
- * JSONObject 到 JSON 字符串 - 简单对象型的转换
- */
- @Test
- public void testJSONObjectToJSONStr() {
- // 已知 JSONObject, 目标要转换为 JSON 字符串
- JSONObject jsonObject = JSONObject.parseObject(JSON_OBJ_STR);
- // 第一种方式
- String jsonString = JSONObject.toJSONString(jsonObject);
- // 第二种方式
- //String jsonString = jsonObject.toJSONString();
- System.out.println(jsonString);
- }
2.1.3. 复杂 JSON 格式字符串与 JSONObject 之间的转换
- /**
- * 复杂 JSON 格式字符串到 JSONObject 的转换
- */
- @Test
- public void testComplexJSONStrToJSONObject() {
- JSONObject jsonObject = JSONObject.parseObject(COMPLEX_JSON_STR);
- String teacherName = jsonObject.getString("teacherName");
- Integer teacherAge = jsonObject.getInteger("teacherAge");
- System.out.println("teacherName:" + teacherName + "teacherAge:" + teacherAge);
- JSONObject jsonObjectcourse = jsonObject.getJSONObject("course");
- // 获取 JSONObject 中的数据
- String courseName = jsonObjectcourse.getString("courseName");
- Integer code = jsonObjectcourse.getInteger("code");
- System.out.println("courseName:" + courseName + "code:" + code);
- JSONArray jsonArraystudents = jsonObject.getJSONArray("students");
- // 遍历 JSONArray
- for (Object object : jsonArraystudents) {
- JSONObject jsonObjectone = (JSONObject) object;
- String studentName = jsonObjectone.getString("studentName");
- Integer studentAge = jsonObjectone.getInteger("studentAge");
- System.out.println("studentName:" + studentName + "studentAge:" + studentAge);
- }
- }
- /**
- * 复杂 JSONObject 到 JSON 格式字符串的转换
- */
- @Test
- public void testJSONObjectToComplexJSONStr() {
- // 复杂 JSONObject, 目标要转换为 JSON 字符串
- JSONObject jsonObject = JSONObject.parseObject(COMPLEX_JSON_STR);
- // 第一种方式
- //String jsonString = JSONObject.toJSONString(jsonObject);
- // 第二种方式
- String jsonString = jsonObject.toJSONString();
- System.out.println(jsonString);
- }
2.2.JSON 格式字符串与 javaBean 之间的转换
2.2.1.JSON 字符串 - 简单对象型与 javaBean 之间的转换
- /**
- * JSON 字符串 - 简单对象到 JavaBean 之间的转换
- */
- @Test
- public void testJSONStrToJavaBeanObj() {
- // 第一种方式
- JSONObject jsonObject = JSONObject.parseObject(JSON_OBJ_STR);
- String studentName = jsonObject.getString("studentName");
- Integer studentAge = jsonObject.getInteger("studentAge");
- //Student student = new Student(studentName, studentAge);
- // 第二种方式, 使用 TypeReference<T > 类, 由于其构造方法使用 protected 进行修饰, 故创建其子类
- //Student student = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});
- // 第三种方式, 使用 Gson 的思想
- Student student = JSONObject.parseObject(JSON_OBJ_STR, Student.class);
- System.out.println(student);
- }
- /**
- * JavaBean 到 JSON 字符串 - 简单对象的转换
- */
- @Test
- public void testJavaBeanObjToJSONStr() {
- Student student = new Student("lily", 12);
- String jsonString = JSONObject.toJSONString(student);
- System.out.println(jsonString);
- }
2.2.2.JSON 字符串 - 数组类型与 javaBean 之间的转换
- /**
- * JSON 字符串 - 数组类型到 JavaBean_List 的转换
- */
- @Test
- public void testJSONStrToJavaBeanList() {
- // 第一种方式
- JSONArray jsonArray = JSONArray.parseArray(JSON_ARRAY_STR);
- // 遍历 JSONArray
- List<Student> students = new ArrayList<Student>();
- Student student = null;
- for (Object object : jsonArray) {
- JSONObject jsonObjectone = (JSONObject) object;
- String studentName = jsonObjectone.getString("studentName");
- Integer studentAge = jsonObjectone.getInteger("studentAge");
- student = new Student(studentName,studentAge);
- students.add(student);
- }
- System.out.println("students:" + students);
- // 第二种方式, 使用 TypeReference<T > 类, 由于其构造方法使用 protected 进行修饰, 故创建其子类
- List<Student> studentList = JSONArray.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {});
- System.out.println("studentList:" + studentList);
- // 第三种方式, 使用 Gson 的思想
- List<Student> studentList1 = JSONArray.parseArray(JSON_ARRAY_STR, Student.class);
- System.out.println("studentList1:" + studentList1);
- }
- /**
- * JavaBean_List 到 JSON 字符串 - 数组类型的转换
- */
- @Test
- public void testJavaBeanListToJSONStr() {
- Student student = new Student("lily", 12);
- Student studenttwo = new Student("lucy", 15);
- List<Student> students = new ArrayList<Student>();
- students.add(student);
- students.add(studenttwo);
- String jsonString = JSONArray.toJSONString(students);
- System.out.println(jsonString);
- }
2.2.3. 复杂 JSON 格式字符串与与 javaBean 之间的转换
- /**
- * 复杂 JSON 格式字符串到 JavaBean_obj 的转换
- */
- @Test
- public void testComplexJSONStrToJavaBean(){
- // 第一种方式, 使用 TypeReference<T > 类, 由于其构造方法使用 protected 进行修饰, 故创建其子类
- Teacher teacher = JSONObject.parseObject(COMPLEX_JSON_STR, new TypeReference<Teacher>() {});
- System.out.println(teacher);
- // 第二种方式, 使用 Gson 思想
- Teacher teacher1 = JSONObject.parseObject(COMPLEX_JSON_STR, Teacher.class);
- System.out.println(teacher1);
- }
- /**
- * 复杂 JavaBean_obj 到 JSON 格式字符串的转换
- */
- @Test
- public void testJavaBeanToComplexJSONStr(){
- // 已知复杂 JavaBean_obj
- Teacher teacher = JSONObject.parseObject(COMPLEX_JSON_STR, new TypeReference<Teacher>() {});
- String jsonString = JSONObject.toJSONString(teacher);
- System.out.println(jsonString);
- }
2.3.javaBean 与 JSON 对象间的之间的转换
2.3.1. 简单 javaBean 与 JSON 对象之间的转换
- /**
- * 简单 JavaBean_obj 到 JSON 对象的转换
- */
- @Test
- public void testJavaBeanToJSONObject(){
- // 已知简单 JavaBean_obj
- Student student = new Student("lily", 12);
- // 方式一
- String jsonString = JSONObject.toJSONString(student);
- JSONObject jsonObject = JSONObject.parseObject(jsonString);
- System.out.println(jsonObject);
- // 方式二
- JSONObject jsonObject1 = (JSONObject) JSONObject.toJSON(student);
- System.out.println(jsonObject1);
- }
- /**
- * 简单 JSON 对象到 JavaBean_obj 的转换
- */
- @Test
- public void testJSONObjectToJavaBean(){
- // 已知简单 JSON 对象
- JSONObject jsonObject = JSONObject.parseObject(JSON_OBJ_STR);
- // 第一种方式, 使用 TypeReference<T > 类, 由于其构造方法使用 protected 进行修饰, 故创建其子类
- Student student = JSONObject.parseObject(jsonObject.toJSONString(), new TypeReference<Student>() {});
- System.out.println(student);
- // 第二种方式, 使用 Gson 的思想
- Student student1 = JSONObject.parseObject(jsonObject.toJSONString(), Student.class);
- System.out.println(student1);
- }
2.3.2.JavaList 与 JsonArray 之间的转换
- /**
- * JavaList 到 JsonArray 的转换
- */
- @Test
- public void testJavaListToJsonArray() {
- // 已知 JavaList
- Student student = new Student("lily", 12);
- Student studenttwo = new Student("lucy", 15);
- List<Student> students = new ArrayList<Student>();
- students.add(student);
- students.add(studenttwo);
- // 方式一
- String jsonString = JSONArray.toJSONString(students);
- JSONArray jsonArray = JSONArray.parseArray(jsonString);
- System.out.println(jsonArray);
- // 方式二
- JSONArray jsonArray1 = (JSONArray) JSONArray.toJSON(students);
- System.out.println(jsonArray1);
- }
- /**
- * JsonArray 到 JavaList 的转换
- */
- @Test
- public void testJsonArrayToJavaList() {
- // 已知 JsonArray
- JSONArray jsonArray = JSONArray.parseArray(JSON_ARRAY_STR);
- // 第一种方式, 使用 TypeReference<T > 类, 由于其构造方法使用 protected 进行修饰, 故创建其子类
- ArrayList<Student> students = JSONArray.parseObject(jsonArray.toJSONString(),
- new TypeReference<ArrayList<Student>>() {});
- System.out.println(students);
- // 第二种方式, 使用 Gson 的思想
- List<Student> students1 = JSONArray.parseArray(jsonArray.toJSONString(), Student.class);
- System.out.println(students1);
- }
2.3.2.JavaList 与 JsonArray 之间的转换
- /**
- * JavaList 到 JsonArray 的转换
- */
- @Test
- public void testJavaListToJsonArray() {
- // 已知 JavaList
- Student student = new Student("lily", 12);
- Student studenttwo = new Student("lucy", 15);
- List<Student> students = new ArrayList<Student>();
- students.add(student);
- students.add(studenttwo);
- // 方式一
- String jsonString = JSONArray.toJSONString(students);
- JSONArray jsonArray = JSONArray.parseArray(jsonString);
- System.out.println(jsonArray);
- // 方式二
- JSONArray jsonArray1 = (JSONArray) JSONArray.toJSON(students);
- System.out.println(jsonArray1);
- }
- /**
- * JsonArray 到 JavaList 的转换
- */
- @Test
- public void testJsonArrayToJavaList() {
- // 已知 JsonArray
- JSONArray jsonArray = JSONArray.parseArray(JSON_ARRAY_STR);
- // 第一种方式, 使用 TypeReference<T > 类, 由于其构造方法使用 protected 进行修饰, 故创建其子类
- ArrayList<Student> students = JSONArray.parseObject(jsonArray.toJSONString(),
- new TypeReference<ArrayList<Student>>() {});
- System.out.println(students);
- // 第二种方式, 使用 Gson 的思想
- List<Student> students1 = JSONArray.parseArray(jsonArray.toJSONString(), Student.class);
- System.out.println(students1);
- }
2.3.3. 复杂 JavaBean_obj 与 JSON 对象之间的转换
- /**
- * 复杂 JavaBean_obj 到 JSON 对象的转换
- */
- @Test
- public void testComplexJavaBeanToJSONObject() {
- // 已知复杂 JavaBean_obj
- Student student = new Student("lily", 12);
- Student studenttwo = new Student("lucy", 15);
- List<Student> students = new ArrayList<Student>();
- students.add(student);
- students.add(studenttwo);
- Course course = new Course("english", 1270);
- Teacher teacher = new Teacher("crystall", 27, course, students);
- // 方式一
- String jsonString = JSONObject.toJSONString(teacher);
- JSONObject jsonObject = JSONObject.parseObject(jsonString);
- System.out.println(jsonObject);
- // 方式二
- JSONObject jsonObject1 = (JSONObject) JSONObject.toJSON(teacher);
- System.out.println(jsonObject1);
- }
- /**
- * 复杂 JSON 对象到 JavaBean_obj 的转换
- */
- @Test
- public void testComplexJSONObjectToJavaBean() {
- // 已知复杂 JSON 对象
- JSONObject jsonObject = JSONObject.parseObject(COMPLEX_JSON_STR);
- // 第一种方式, 使用 TypeReference<T > 类, 由于其构造方法使用 protected 进行修饰, 故创建其子类
- Teacher teacher = JSONObject.parseObject(jsonObject.toJSONString(), new TypeReference<Teacher>() {});
- System.out.println(teacher);
- // 第二种方式, 使用 Gson 的思想
- Teacher teacher1 = JSONObject.parseObject(jsonObject.toJSONString(), Teacher.class);
- System.out.println(teacher1);
- }
总结
- // 把 JSON 文本 parse 为 JSONObject 或者 JSONArray
- public static final Object parse(String text);
- // 把 JSON 文本 parse 成 JSONObject
- public static final JSONObject parseObject(String text);
- // 把 JSON 文本 parse 为 JavaBean
- public static final <T> T parseObject(String text, Class<T> clazz);
- // 把 JSON 文本 parse 成 JSONArray
- public static final JSONArray parseArray(String text);
- // 把 JSON 文本 parse 成 JavaBean 集合
- public static final <T> List<T> parseArray(String text, Class<T> clazz);
- // 将 JavaBean 序列化为 JSON 文本
- public static final String toJSONString(Object object);
- // 将 JavaBean 序列化为带格式的 JSON 文本
- public static final String toJSONString(Object object, boolean prettyFormat);
- // 将 JavaBean 转换为 JSONObject 或者 JSONArray.
- public static final Object toJSON(Object javaObject);
参考:
https://github.com/alibaba/fastjson
来源: http://www.bubuko.com/infodetail-3163613.html