【Android 应用开发】 FastJson 使用详解(一)

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) 方法, 示例 - 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":"Sherlock Holmes",
    "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":"Sherlock Holmes",
  "schoolId":1
    },
    {
  "age":42,
  "id":2,
  "male":false,
  "name":"John Watson",
  "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,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1}
{
    "age":42,
    "id":1,
    "male":true,
    "name":"Sherlock Holmes",
    "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,"id":1,"male":true,"name":"Sherlock Holmes","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, "Sherlock Holmes", 42, true, 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", 42, 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,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1} -- 打印 JSONOBject 本身
{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1} -- 打印 JSONOBject.toString()
{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1} -- 打印 JSONOBject.toJSONString()
[{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"John Watson","schoolId":1}] -- 打印 JSONArray 本身
[{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"John Watson","schoolId":1}] -- 打印 JSONArray.toString()
[{"age":42,"id":1,"male":true,"name":"Sherlock Holmes","schoolId":1},{"age":42,"id":2,"male":false,"name":"John Watson","schoolId":1}] -- 打印 JSONArray.toJSONString()
上一篇:Luogu P5110 块速递推


下一篇:投票统计,统计每个数字出现的次数,输入-1代表结束。