【Android 应用开发】 FastJson 使用详解
博客地址 :http://blog.csdn.net/shulianghan/article/details/41011605 fastjson 源码地址 : -- GitHub :https://github.com/alibaba/fastjson ; -- 示例源码 :https://github.com/alibaba/fastjson/wiki/Samples-DataBind ; --Jar下载:http://sourceforge.net/projects/fastjson/; 总结 : Java Bean <--> json 字符串 <--> JSONObject 互相转化 json 字符串 与 Java Bean 对象 互相转化 : --json 字符串 -> Java Bean 对象:JSON.parSEObject(String text,Class<Student> clazz)方法,示例 -Student student = JSON.parSEObject(json_student,Student.class); -- Java Bean 对象 -> json 字符串 : JSON.toJSONString(Object object,boolean prettyFormat) 方法,示例 -String format_json = JSON.toJSONString(student,true); Java Bean 对象 与 JSONObject 对象 互相转化 : -- Java Bean 对象 -> JSONObject 对象 :JSON.toJSON(Object javaObject) 方法,0);">JSONObject object = (JSONObject) JSON.toJSON(student_s); -- json 字符串 与 JSONObject 对象互相转化 : --json 字符串 -> JSONObject 对象:JSON.parSEObject(String text)方法,0);">JSONObject object = JSON.parSEObject(json_student); -- JSONObject 对象 -> json 字符串 : JSONObject.toString() 方法,0);">object.toString(); Java Bean 对象 <--> json 字符串 <--> JSONArray 对象 互相转化 json 字符串 与 Java 集合 互相转化 : --json 字符串 -> Java 集合:JSON.parSEObject(String text,Class<Student> clazz)方法,示例 -List<Student> students = JSON.parseArray(json_array,Student.class); -- Java 集合 -> json 字符串 :toJSONString(Object object,示例 -String json_array = JSON.toJSONString(students,true); Java 集合 与 JSONArray 对象 互相转化 : -- Java 集合 -> JSONArray 对象 : JSON.toJSON(Object javaObject) 方法,0);">JSONArray array = (JSONArray) JSON.toJSON(students); -- json 字符串 与 JSONArray 对象 互相转化 : -- json 字符串 -> JSONArray 对象 : JSON.parseArray(String text) 方法,0);">JSONArray array = JSON.parseArray(json_array); -- JSONArray 对象 -> json 字符串 : jsonArray.toString() 方法; 一. JSON 简介1. JSON 结构(1) 对象对象简介 : -- 格式 : 对象定义在 大括号 {} 中,中间的项由 逗号 隔开,每个项目都是 key : value 进行的; -- 示例 :{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1}; -- 格式化后的 :
{ "age":42,"schoolId":1 } (2) 数组数组简介 : -- 数组格式 : 数组放在 中括号[] 中,在 [] 中有 n 个 {} 元素,每个元素用 逗号 隔开; -- 数组示例 :[{"age":42,"schoolId":1},{"age":42,"id":2,"male":false,"name":"John Watson","schoolId":1}] ; -- 输出格式化后的数组 :
[ { "age":42,"schoolId":1 },{ "age":42,"schoolId":1 } ] 二. JSON 相关用法1.JSON.toJSONString 方法(1) JSON.toJSONString(Object object)方法简介JSON.toJSONString(Object object)方法简介 : -- 方法定义 :public static final String toJSONString(Object object) ; -- 方法作用 : 将 java bean 转为 json 字符串; -- 方法位置 :String com.alibaba.fastjson.JSON.toJSONString(Object object) ; -- 参数介绍 : Object object -> 要转换的实体类对象; JSON.toJSONString(Object object,boolean prettyFormat)方法简介 : -- 方法定义 :public static final String toJSONString(Object object,boolean prettyFormat) ; -- 方法作用 : 将 java bean 转为 json 字符串,并将 json 字符串格式化; -- 方法位置 :String com.alibaba.fastjson.JSON.toJSONString(Object object,boolean prettyFormat) ; -- 参数介绍 :Object object -> 要转换的实体类对象,boolean prettyFormat -> 是否将 json 字符串格式化 如果 false 与 上面的方法作用相同; (2) JSON.toJSONString(Object object) 和 JSON.toJSONString(Object object,boolean prettyFormat)方法使用示例JavaBean 类定义 :
package cn.org.octopus.fastjson.beans; public class Student { private int id; private String name; private int age; private boolean isMale; private int schoolId; public Student() { super(); } public Student(int id,String name,int age,boolean isMale,int schoolId) { super(); this.id = id; this.name = name; this.age = age; this.isMale = isMale; this.schoolId = schoolId; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isMale() { return isMale; } public void setMale(boolean isMale) { this.isMale = isMale; } public int getSchoolId() { return schoolId; } public void setSchoolId(int schoolId) { this.schoolId = schoolId; } @Override public String toString() { return "Student [id=" + id + ",name=" + name + ",age=" + age + ",isMale=" + isMale + ",schoolId=" + schoolId + "]"; } } main 函数代码 :
public static void main(String[] args) { //创建一个 Student 对象 Student student = new Student(1,"Sherlock Holmes",42,true,1); //将 Student 对象转为 json 字符串 String json = JSON.toJSONString(student); //打印 json 字符串 System.out.println(json); //将 Student 对象转为 json 字符串,这个字符串是经过格式化的 String format_json = JSON.toJSONString(student,true); //打印格式化的 json System.out.println(format_json); } 执行结果 : -- 第一个结果 : 该结果没有经过格式化,只是将 json 字符串输出; -- 第二个结果 : 该结果按照 json 的格式进行格式化了;
{"age":42,"schoolId":1} { "age":42,"schoolId":1 } 2.JSON.toJSON 方法(1)JSON.toJSON(Object javaObject) 方法简介方法简介 : -- 方法定义 :public static final Object toJSON(Object javaObject) ; -- 方法作用 : 将 java bean 对象转为 JSONObject 对象,或者将 集合 转为 JSONArray 对象; -- 方法位置 :Object com.alibaba.fastjson.JSON.toJSON(Object javaObject) ; -- 参数介绍 : Object javaObject -> java bean 对象 或者 集合; 关键代码解析 : -- Java Bean 转 JSONObject :JSONObject object = (JSONObject) JSON.toJSON(student_s); -- Java 集合 转 JSONArray :JSONArray array = (JSONArray) JSON.toJSON(students); JSONOject 和 JSONArray 打印 : 这两种对象 打印本身,toString() 以及 toJSONString() 都是相同的结果,详见下面的示例; (2) 示例Student 实体类 : 在 一. 1. (2) 中有定义,直接使用该实体类即可; Main() 示例 :
public class Main { //该字符串是 {"age":42,"schoolId":1} 注意将 " 转为 " public static final String json_student = "{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1}"; public static void main(String[] args) { //创建一个 Student 对象 Student student_s = new Student(1,1); //将 java bean 对象转为 JSONObject 对象 JSONObject object = (JSONObject) JSON.toJSON(student_s); //JSONObject 直接打印,打印 toString() 或者 toJSONString() 输出结果是一样的 System.out.println(object + " -- 打印 JSONOBject 本身"); System.out.println(object.toString() + " -- 打印 JSONOBject.toString()"); System.out.println(object.toJSONString() + " -- 打印 JSONOBject.toJSONString()"); //再创建一个 Student 对象 Student student_j = new Student(2,"John Watson",false,1); //将两个 Student 对象放到 List 集合中 List<Student> students = new ArrayList<Student>(); students.add(student_s); students.add(student_j); //将 List 集合对象转为 JSONArray 对象 JSONArray array = (JSONArray) JSON.toJSON(students); //JSONArray 直接打印,打印 toString() 或者 toJSONString() 输出结果是一样的 System.out.println(array + " -- 打印 JSONArray 本身"); System.out.println(array.toString() + " -- 打印 JSONArray.toString()"); System.out.println(array.toJSONString() + " -- 打印 JSONArray.toJSONString()"); } 执行结果 :
{"age":42,"schoolId":1} -- 打印 JSONOBject 本身 {"age":42,"schoolId":1} -- 打印 JSONOBject.toString() {"age":42,"schoolId":1} -- 打印 JSONOBject.toJSONString() [{"age":42,"schoolId":1}] -- 打印 JSONArray 本身 [{"age":42,"schoolId":1}] -- 打印 JSONArray.toString() [{"age":42,"schoolId":1}] -- 打印 JSONArray.toJSONString() 3.JSON.parseArray 方法(1)JSON.parseArray 方法简介JSONArray parseArray(String text)方法简介 : -- 方法定义 :public static final JSONArray parseArray(String text) ; -- 方法作用 : 将 json 字符串转为 JSONArray 对象; -- 方法位置 :JSONArray com.alibaba.fastjson.JSON.parseArray(String text) ; -- 参数介绍 :String text -> json 字符串 ; <T> List<T> parseArray(String text,Class<T> clazz) 方法简介 : -- 方法定义 :public static final <T> List<T> parseArray(String text,Class<T> clazz) ; -- 方法作用 : 将 json 字符串转为 List 集合; -- 方法位置 :<T> List<T> com.alibaba.fastjson.JSON.parseArray(String text,Class<T> clazz) ; -- 参数介绍 :String text->json 字符串,Class<T> clazz -> 集合元素类型; (2) 代码示例Main() 代码 :
//字符串内容 [{"age":42,"schoolId":1}] public static final String json_array = "[{"age":42,"schoolId":1},{"age":42,"id":2,"male":false,"name":"John Watson","schoolId":1}]"; public static void main(String[] args) { //将 json 字符串转为 JSONArray 对象 JSONArray array = JSON.parseArray(json_array); //打印 JSONArray 对象 System.out.println(array); //将 json 字符串转为 List 集合 List<Student> students = JSON.parseArray(json_array,Student.class); //打印 List 集合大小 System.out.println("students.size() : " + students.size()); //遍历 List 集合中的元素 for(Student student : students) System.out.println(student.toString()); } 执行结果 :
[{"age":42,"schoolId":1}] students.size() : 2 Student [id=1,name=Sherlock Holmes,age=42,isMale=true,schoolId=1] Student [id=2,name=John Watson,isMale=false,schoolId=1] 4. JSON.parSEObject 方法(1)JSON.parSEObject 方法简介JSONObject parSEObject(String text) 方法简介 : -- 方法定义 :public static final JSONObject parSEObject(String text); -- 方法作用 : 将 json 字符串类型转化为 JSONObject 对象; -- 方法位置 :JSONObject com.alibaba.fastjson.JSON.parSEObject(String text); -- 参数介绍 :String text -> json 字符串; <T> T parSEObject(String text,Class<T> clazz) 方法简介 :
-- 方法定义 :public static final <T> T parSEObject(String text,Class<T> clazz); -- 方法作用 : 将 json 字符串转为指定类型的 java bean 对象; -- 方法位置 :<T> T com.alibaba.fastjson.JSON.parSEObject(String text,Class<T> clazz); -- 参数介绍 :String text -> json 字符串,Class<T> clazz -> 要转化的 java bean 对象类型;
|