• Java基础知识17fastJSON 简单使用(JSONObject)


    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

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.75</version>
    </dependency>

    2.1 序列化

     2.1.1 将Map转成JSON

    使用案例:

    public class FastJsonTest {
        public static void main(String[] args) {
            Map<String, Object> 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<Map>转成JSON

    使用案例:

    /**
     * @Author lucky
     * @Date 2021/12/31 14:40
     */
    public class FastJsonTest {
        public static void main(String[] args) {
            List<Map<String, Object>> list = new ArrayList<>();
    
            Map<String, Object> map1 = new HashMap<>();
            map1.put("key1", "One");
            map1.put("key2", "Two");
    
            Map<String, Object> 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<Map> maps = JSON.parseArray(listJson, Map.class);
            for(Map<String, Object> 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

    3.3 自定义JavaBean User转成JSON字符串

        public static void obj2String(){
            User user=new User();
            user.setName("lucky");
            user.setAge(25);
            String s = JSONObject.toJSONString(user);
            System.out.println(s);
        }

    控制台输出:

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

    参考文献:

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

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

  • 相关阅读:
    数据分析day04
    数据分析day03
    数据分析 day02
    Index of /android/repository
    WPF ListView 数据懒加载
    WPF TextBlock 文字超长截断并显示省略符号
    android adb socket 通信
    android 获取 cpu 频率信息
    Android 联系人导入导出(VCard格式)
    Android Contact 导入导出 vcf格式(不依赖第三方库)
  • 原文地址:https://www.cnblogs.com/luckyplj/p/15745722.html
Copyright © 2020-2023  润新知