博客地址: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/;
总结 :
JavaBean <--> json 字符串 <--> JSONObject 互相转化
json 字符串 与javaBean 对象 互相转化 :
--json 字符串 ->JavaBean 对象: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)方法, 示例 -JSONObject object = (JSONObject) JSON.toJSON(student_s);
--JSONObject 对象 -> Java Bean 对象 (无直接方法实现):JSON.parseObject(jsonObject.toString(), Class<T> clazz)方法,先转成字符串, 再转成 Java Bean;
json 字符串 与 JSONObject 对象互相转化:
--json 字符串 -> JSONObject 对象:JSON.parseObject(String text)方法, 示例 -JSONObject object = JSON.parseObject(json_student);
--JSONObject 对象 -> json 字符串:JSONObject.toString()方法, 示例 -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, boolean prettyFormat)方法, 示例 -String json_array = JSON.toJSONString(students, true);
Java 集合 与 JSONArray 对象 互相转化:
--Java 集合 -> JSONArray 对象:JSON.toJSON(Object javaObject)方法, 示例 -JSONArray array = (JSONArray) JSON.toJSON(students);
--JSONArray 对象 -> Java 集合(没有直接转化方法) : 先转成 json 字符串, 再转成 Java 集合;
json 字符串 与 JSONArray 对象 互相转化:
--json 字符串 -> JSONArray 对象:JSON.parseArray(String text)方法, 示例 -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,
- "id":1,
- "male":true,
- "name":"SherlockHolmes",
- "schoolId":1
- }
(2) 数组
数组简介:
--数组格式: 数组放在 中括号[] 中, 在 [] 中有 n 个 {} 元素, 每个元素用 逗号 隔开;
--数组示例:[{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"John Watson","schoolId":1}] ;
--输出格式化后的数组:
- [
- {
- "age":42,
- "id":1,
- "male":true,
- "name":"SherlockHolmes",
- "schoolId":1
- },
- {
- "age":42,
- "id":2,
- "male":false,
- "name":"JohnWatson",
- "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 类定义:
- packagecn.org.octopus.fastjson.beans;
- publicclassStudent{
- privateintid;
- privateStringname;
- privateintage;
- privatebooleanisMale;
- privateintschoolId;
- publicStudent(){
- super();
- }
- publicStudent(intid,Stringname,intage,booleanisMale,intschoolId){
- super();
- this.id=id;
- this.name=name;
- this.age=age;
- this.isMale=isMale;
- this.schoolId=schoolId;
- }
- publicintgetId(){
- returnid;
- }
- publicvoidsetId(intid){
- this.id=id;
- }
- publicStringgetName(){
- returnname;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- publicintgetAge(){
- returnage;
- }
- publicvoidsetAge(intage){
- this.age=age;
- }
- publicbooleanisMale(){
- returnisMale;
- }
- publicvoidsetMale(booleanisMale){
- this.isMale=isMale;
- }
- publicintgetSchoolId(){
- returnschoolId;
- }
- publicvoidsetSchoolId(intschoolId){
- this.schoolId=schoolId;
- }
- @Override
- publicStringtoString(){
- return"Student[,name="+name+",age="+age
- +",isMale="+isMale+",school]";
- }
- }
main 函数代码:
- publicstaticvoidmain(String[]args){
- //创建一个Student对象
- Studentstudent=newStudent(1,"SherlockHolmes",42,true,1);
- //将Student对象转为json字符串
- Stringjson=JSON.toJSONString(student);
- //打印json字符串
- System.out.println(json);
- //将Student对象转为json字符串,这个字符串是经过格式化的
- Stringformat_json=JSON.toJSONString(student,true);
- //打印格式化的json
- System.out.println(format_json);
- }
执行结果:
--第一个结果: 该结果没有经过格式化, 只是将 json 字符串输出;
--第二个结果: 该结果按照 json 的格式进行格式化了;
- {"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}
- {
- "age":42,
- "id":1,
- "male":true,
- "name":"SherlockHolmes",
- "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() 示例:
- publicclassMain{
- //该字符串是{"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}注意将"转为\"
- publicstaticfinalStringjson_student="{\"age\":42,\"id\":1,\"male\":true,\"name\":\"SherlockHolmes\",\"schoolId\":1}";
- publicstaticvoidmain(String[]args){
- //创建一个Student对象
- Studentstudent_s=newStudent(1,"SherlockHolmes",42,true,1);
- //将javabean对象转为JSONObject对象
- JSONObjectobject=(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对象
- Studentstudent_j=newStudent(2,"JohnWatson",42,false,1);
- //将两个Student对象放到List集合中
- List<Student>students=newArrayList<Student>();
- students.add(student_s);
- students.add(student_j);
- //将List集合对象转为JSONArray对象
- JSONArrayarray=(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,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}--打印JSONOBject本身
- {"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}--打印JSONOBject.toString()
- {"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}--打印JSONOBject.toJSONString()
- [{"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"JohnWatson","schoolId":1}]--打印JSONArray本身
- [{"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"JohnWatson","schoolId":1}]--打印JSONArray.toString()
- [{"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"JohnWatson","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,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"JohnWatson","schoolId":1}]
- publicstaticfinalStringjson_array="[{\"age\":42,\"id\":1,\"male\":true,\"name\":\"SherlockHolmes\",\"schoolId\":1},{\"age\":42,\"id\":2,\"male\":false,\"name\":\"JohnWatson\",\"schoolId\":1}]";
- publicstaticvoidmain(String[]args){
- //将json字符串转为JSONArray对象
- JSONArrayarray=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(Studentstudent:students)
- System.out.println(student.toString());
- }
执行结果:
- [{"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"JohnWatson","schoolId":1}]
- students.size():2
- Student[id=1,name=SherlockHolmes,age=42,isMale=true,schoolId=1]
- Student[id=2,name=JohnWatson,age=42,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 对象类型;
(2) 方法示例
Main() 方法:
- //该字符串是{"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}注意将"转为\"
- publicstaticfinalStringjson_student="{\"age\":42,\"id\":1,\"male\":true,\"name\":\"SherlockHolmes\",\"schoolId\":1}";
- publicstaticvoidmain(String[]args){
- //将json字符串转为JSONObject对象
- JSONObjectobject=JSON.parseObject(json_student);
- //打印JSONObject对象
- System.out.println(object);
- //将json字符串转为Student对象
- Studentstudent=JSON.parseObject(json_student,Student.class);
- //打印Student对象
- System.out.println(student.toString());
- }
执行结果:
- {"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}
- Student[id=1,name=SherlockHolmes,age=42,isMale=true,schoolId=1]
5.JSON.parse 方法
(1)Object parse(String text) 方法简介
方法简介:
--方法定义:public static final Object parse(String text);
--方法作用: 将 json 字符串转为 JSONObject 或者 JSONArray 对象;
--方法位置:Object com.alibaba.fastjson.JSON.parse(String text);
--参数介绍:String text->json 字符串;
(2) 代码示例
Main() 方法:
- //该字符串是{"age":42,"id":1,"male":true,"name":"SherlockHolmes","schoolId":1}注意将"转为\"
- publicstaticfinalStringjson_student="{\"age\":42,\"id\":1,\"male\":true,\"name\":\"SherlockHolmes\",\"schoolId\":1}";
- publicstaticvoidmain(String[]args){
- //将json字符串转为JSONObect对象
- JSONObjectobject=(JSONObject)JSON.parse(json_student);
- //打印JSONObject对象
- System.out.println(object);
- //将json字符串转为JSONArray对象