Java基础知识17--fastJSON 简单使用


1.JSON基础

1.1 JSON概述

JSON或JavaScript Object Notation是一种基于文本的轻量级开放标准,专为人类可读的数据交换而设计。 程序员已经知道JSON使用的约定,包括C,C ++,Java,Python,Perl等。

  • JSON代表JavaScript Object Notation。

  • 格式由Douglas Crockford指定。

  • 它专为人类可读的数据交换而设计。

  • 它已经从JavaScript脚本语言扩展而来。

  • 文件扩展名为.json 。

  • JSON Internet Media类型是application/json 。

  • 统一类型标识符是public.json。

JSON的使用场景:

  • 在编写包含浏览器扩展和网站的基于JavaScript的应用程序时使用它。

  • JSON格式用于通过网络连接序列化和传输结构化数据。

  • 它主要用于在服务器和Web应用程序之间传输数据。

  • Web服务和API使用JSON格式来提供公共数据。

  • 它可以与现代编程语言一起使用。

 1.2 JSON语法

JSON语法基本上被认为是JavaScript语法的子集; 它包括以下内容 -

  • 数据以名称/值对表示。

  • 大括号保持对象,每个名称后跟':'(冒号),名称/值对用(逗号)分隔。

  • 方括号包含数组,值以(逗号)分隔。

使用案例:

{
   "book": [
      {
         "id": "01",
         "language": "Java",
         "edition": "third",
         "author": "Herbert Schildt"
      },
      {
         "id": "07",
         "language": "C++",
         "edition": "second",
         "author": "E.Balagurusamy"
      }
   ]
}

 2.FastJson

fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍,fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库。 FastJson速度最快,fastjson具有极快的性能,超越任其他的Java Json parser。

maven依赖:
mvnrepository地址:https://mvnrepository.com/artifact/com.alibaba/fastjson/1.2.75


<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>fastjsonartifactId>
    <version>1.2.75version>
dependency>

2.1 序列化

 2.1.1 将Map转成JSON

使用案例:

public class FastJsonTest {
    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("key1", "One");
        map.put("key2", "Two");
        String mapJson = JSON.toJSONString(map);
        System.out.println(mapJson);
    }
}

控制台输出:

{"key1":"One","key2":"Two"}

2.1.2 将List转成JSON

使用案例:

/**
 * @Author lucky
 * @Date 2021/12/31 14:40
 */
public class FastJsonTest {
    public static void main(String[] args) {
        List> list = new ArrayList<>();

        Map map1 = new HashMap<>();
        map1.put("key1", "One");
        map1.put("key2", "Two");

        Map map2 = new HashMap<>();
        map2.put("key3", "Three");
        map2.put("key4", "Four");

        list.add(map1);
        list.add(map2);

        String listJson = JSON.toJSONString(list);
        String formatJson = JSON.toJSONString(list, true);


        System.out.println(listJson);
        System.out.println(formatJson);
    }
}

控制台输出:

[{"key1":"One","key2":"Two"},{"key3":"Three","key4":"Four"}]
[
    {
        "key1":"One",
        "key2":"Two"
    },
    {
        "key3":"Three",
        "key4":"Four"
    }
]

可以输出格式化后的 JSON 字符串:

String objJson = JSON.toJSONString(Object object, boolean prettyFormat);

2.1.3 自定义JavaBean User转成JSON

使用案例:

User实体类:

/**
 * @Author lucky
 * @Date 2021/12/31 15:02
 */
@Data
public class User {
    private String name;
    private int age;
}

测试代码:

public class FastJsonTest {
    public static void main(String[] args) {
        User user=new User();
        user.setName("lucky");
        user.setAge(25);
        String s = JSON.toJSONString(user);
        System.out.println(s);
    }
}

控制台输出:

{"age":25,"name":"lucky"}

2.1.4 指定输出日期格式

使用案例:

public class FastJsonTest {
    public static void main(String[] args) {
        String dateJson = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
        System.out.println(dateJson);
    }
}

控制台输出:

"2021-12-31 15:26:55.100"

2.2 反序列化

反序列化就是把JSON格式的字符串转化为Java Bean对象。

 2.2.1 将2.1.3案例反序列化

使用案例:

public class FastJsonTest {
    public static void main(String[] args) {
        String userJson="{"age":25,"name":"lucky"}"; 
     User user1
= JSON.parseObject(userJson, User.class);
System.out.println(user1.getName());
}
}

控制台输出:

lucky

2.2.2 集合反序列化

public class FastJsonTest {
    public static void main(String[] args) {
        String listJson="[{\"key1\":\"One\",\"key2\":\"Two\"},{\"key1\":\"Three\",\"key2\":\"Four\"}]";
        List maps = JSON.parseArray(listJson, Map.class);
        for(Map map : maps){
            System.out.println(map.get("key1"));
            System.out.println(map.get("key2"));
        }
    }
}

 控制台输出:

One
Two
Three
Four

3.JSONObject

3.1 JSONObject 转 JSON 字符串

public class FastJsonTest {
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "wjw");
        jsonObject.put("age", 22);
        jsonObject.put("sex", "男");
        jsonObject.put("school", "计量");
        String jsonStr = JSONObject.toJSONString(jsonObject);
        System.out.println(jsonStr);

    }
}

控制台输出:

{"school":"计量","sex":"男","name":"wjw","age":22}

 3.2 JSON 字符串 转 JSONObject 对象

public class FastJsonTest {
    public static void main(String[] args) {
        String jsonStr1 = "{\"school\":\"计量\",\"sex\":\"男\",\"name\":\"lucky\",\"age\":22}";
        JSONObject jsonObject2 = JSONObject.parseObject(jsonStr1);
        System.out.println(jsonObject2.getString("name"));
        System.out.println(jsonObject2.getInteger("age"));

    }
}

控制台输出:

lucky
22

参考文献:

https://blog.csdn.net/flysun3344/article/details/54707965

https://www.cnblogs.com/wjw1014/p/11677499.html