JSON && FastJson

JSON

定义:JavaScript Object Notation 的缩写。javaScript对象标识符。

主要用于前后端数据传输的一种数据封装格式。

Json的数据类型

数据结构

  1. 对象类型 : Object

    {}: 使用花括号来表示
    【内部是键值对的格式,key必须是string类型,value可以是基本类型,也可以是数据结构类型】。
    
  2. 数组类型 : Array

    • 数组 / 对象数组类型
    [{},{},{},...]: 所有的对象包裹在中括号内部,多个元素之间使用逗号分隔。
    

基本数据类型

  1. 字符串类型 : string
  2. 数值类型 : number
  3. 真类型 : true
  4. 假类型 : false
  5. 空类型 : null

示例:

[
    {"id":1001,"name":"张3丰","age":100,"girlfriend":false,"car":null,
     "hobby":
     ["练功","喝酒"]
    },
    {"id":1002,"name":"张5忌","age":7,"girlfriend":false,"car":null,
     "hobby":
     ["抽烟","喝酒"]
    },
    {"id":1003,"name":"猪8戒","age":700,"girlfriend":false,"car":null,
     "hobby":
     ["吃","睡"]
    }
]

FastJson API

是阿里巴巴开源的JSON解析库,主要有两个功能:

  1. 将对象转换为Json字符串,这个过程称之为序列化。参数为对象。
  2. 将Json字符串转换为对象,这个过程称之为反序列化。参数为Json文本。

数据准备

Java Bean对象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {

    private String name;
    private String gender;
    private int age;
}

FastJson 序列化 API

  1. 将对象、List集合、Map集合序列化为JSON文本

    public static final String toJSONString(Object object);

    public static final String toJSONString(List list);

    public static final String toJSONString(Map map);

    public class TestJson {
    
        public static void main(String[] args) {
    
            Student stu1 = new Student("张三", "男", 13);
            Student stu2 = new Student("李四", "女", 14);
            Student stu3 = new Student("王五", "男", 15);
    
            ArrayList<Student> list = new ArrayList<>();
            list.add(stu1);
            list.add(stu2);
            list.add(stu3);
    
            // TODO 1. 单个对象序列化为JSON文本
            String stu1Json = JSON.toJSONString(stu1);
            //{"age":13,"gender":"男","name":"张三"}
            System.out.println(s1);
    
            // TODO 2. 集合序列化为JSON文本
            String listJson = JSON.toJSONString(list);
            //[{"age":13,"gender":"男","name":"张三"},{"age":14,"gender":"女","name":"李四"},{"age":15,"gender":"男","name":"王五"}]
            System.out.println(listJson);
            
             HashMap<String, Student> map = new HashMap<>();
             map.put("student1",stu1);
             map.put("student2",stu2);
             map.put("student3",stu3);
             String mapJson = JSON.toJSONString(map);
             /*
                 {"student2":{"age":14,"gender":"女","name":"李四"},
                  "student1":{"age":13,"gender":"男","name":"张三"},
                  "student3":{"age":15,"gender":"男","name":"王五"}}
              */
             System.out.println(mapJson);
        }
    }
    
  2. 将对象、List集合、Map集合序列化为带格式的JSON文本

    public static final String toJSONString(Object object, boolean prettyFormat);

    public static final String toJSONString(List list, boolean prettyFormat);

    public static final String toJSONString(Map map, boolean prettyFormat);

            // TODO 3. 将对象序列化为带格式的JSON文本
            String result = JSON.toJSONString(stu1, true);
            /*
               {
                  "age":13,
                  "gender":"男",
                  "name":"张三"
               }
             */
            System.out.println(result);
    
  3. 将对象、集合序列化为JSONObject或者JSONArray。

    JSONObject 和 Object是不一样的:

    JSONObject 是Json对象,其实就是Json数据:{“name”:“张三”,“gender”:“男”,“age”:13}

    Object就是一个Java对象:Student(name=张三, gender=男, age=13)

    public static final Object toJSON(Object javaObject);

    public static final Object toJSON(List list);

            // TODO 4. 将对象序列化为JSONObject或者JSONArray。
            Object result1 = JSON.toJSON(stu3);
            // {"gender":"男","name":"王五","age":15}
            System.out.println(result1);
            
            Object listJson3 = JSON.toJSON(list);
            // [{"gender":"男","name":"张三","age":13},{"gender":"女","name":"李四","age":14},{"gender":"男","name":"王五","age":15}]
            System.out.println(listJson3);
    

FastJson 反序列化 API

  1. 把JSON文本反序列化为JSONObject或者JSONArray

    public static final Object parse(String json);

  2. 把JSON文本反序列化成JSONObject

    public static final JSONObject parseObject(String json);

    String json = "{\"age\":13,\"gender\":\"男\",\"name\":\"张三\"}";
    JSONObject result3 = JSON.parseObject(json);
     // {"gender":"男","name":"张三","age":13}
     System.out.println(result3);
    

    如果JSONObject是嵌套数据格式(即map集合):

    {“student”: {“name”: “张三”,“gender”: “男”,“age”: 13},“teacher”: {“name”: “霍元甲”,“gender”: “男”,“age”: 57}}。

    那么就可以通过result3.getJSONObject(“student”)获取数据,返回值仍然 是JSON对象类型。
    但是也可以通过result3.getString(“student”)获取数据,此时的返回值是String类型。

  3. 把JSON文本反序列化为JavaBean

    public static final T parseObject(String json, Class clazz);

    String json = "{\"age\":13,\"gender\":\"男\",\"name\":\"张三\"}";
    Student student = JSON.parseObject(json, Student.class);
    // Student(name=张三, gender=男, age=13)
    System.out.println(student);
    
  4. 把JSON文本反序列化为JSONArray

    public static final JSONArray parseArray(String json);

  5. 把JSON文本反序列化为JavaBean集合

    public static final <T> List<T> parseArray(String json, Class<T> clazz);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值