• fastjson使用


    在项目中使用到了fastjson,故研究了一下。现将自己的几个测试用例和大家分享一下~

    首先在pom.xml文件中,加入依赖:

        <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.8</version>
            </dependency>

    创建一个实体类:

    public class XwjUser implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private int id;
    
        private String message;
    
        private Date sendTime;
    
        // 这里手写字母大写,只是为了测试使用,是不符合java规范的
        private String NodeName;
    
        private List<Integer> intList;
    
        public XwjUser() {
            super();
        }
    
        public XwjUser(int id, String message, Date sendTime) {
            super();
            this.id = id;
            this.message = message;
            this.sendTime = sendTime;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public Date getSendTime() {
            return sendTime;
        }
    
        public void setSendTime(Date sendTime) {
            this.sendTime = sendTime;
        }
    
        public String getNodeName() {
            return NodeName;
        }
    
        public void setNodeName(String nodeName) {
            NodeName = nodeName;
        }
    
        public List<Integer> getIntList() {
            return intList;
        }
    
        public void setIntList(List<Integer> intList) {
            this.intList = intList;
        }
    
        @Override
        public String toString() {
            return "XwjUser [id=" + id + ", message=" + message + ", sendTime=" + sendTime + ", intList=" + intList + "]";
        }
    
    }

    接下来看测试用例:

    1、对象与json

    @Test
        public void testObject() {
            XwjUser user = new XwjUser(1, "Hello World", new Date());
            user.setNodeName("node");
    
            // 第二个参数为是否格式化json
            String jsonStr = JSON.toJSONString(user, true);
            System.out.println("对象转为字符串:" + jsonStr);
    
            XwjUser userDes = JSON.parseObject(jsonStr, XwjUser.class);
            System.out.println("字符串转为对象:" + userDes);
        }

    运行结果:

    对象转为字符串:{
        "id":1,
        "message":"Hello World",
        "nodeName":"node",
        "sendTime":1525222546733
    }
    字符串转为对象:XwjUser [id=1, message=Hello World, sendTime=Wed May 02 08:55:46 CST 2018, intList=null]

    注意事项:

      1、对象转json字符串时,对象中的NodeName首字母是大写,转出来是小写。

      2、json转对象时,实体类中一定要加上默认的无参构造器

    2、map与json

    @Test
        public void testMap() {
            Map<String, Object> testMap = new HashMap<>();
            testMap.put("name", "merry");
            testMap.put("age", 30);
            testMap.put("date", new Date());
            testMap.put("isDel", true);
            testMap.put("user", new XwjUser(1, "Hello World", new Date()));
    
            String jsonStr = JSON.toJSONString(testMap);
            System.out.println("Map转为字符串:" + jsonStr);
    
            Map<String, Object> mapDes = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {});
            System.out.println("字符串转map:" + mapDes);
        }

    运行结果:

    Map转为字符串:{"date":1525223256653,"name":"merry","isDel":true,"user":{"id":1,"message":"Hello World","sendTime":1525223256654},"age":30}
    字符串转map:{date=1525223256653, name=merry, isDel=true, user={"id":1,"message":"Hello World","sendTime":1525223256654}, age=30}

    3、list与json

    @Test
        public void testMapList() {
            List<Map<String, Object>> mapList = new ArrayList<>();
    
            Map<String, Object> map1 = new HashMap<>();
            map1.put("name", "merry");
            map1.put("age", 30);
            map1.put("date", new Date());
            map1.put("isDel", true);
    
            Map<String, Object> map2 = new HashMap<>();
            map2.put("name", "jim");
            map2.put("age", 28);
            map2.put("isDel", false);
    
            mapList.add(map1);
            mapList.add(map2);
    
            String jsonStr = JSON.toJSONString(mapList);
            System.out.println("list转为字符串:" + jsonStr);
    
            // 传入泛型类型
            List<Map> listDes = JSON.parseArray(jsonStr, Map.class);
            System.out.println("字符串转为list:" + listDes);
        }

    运行结果:

    list转为字符串:[{"date":1525223309870,"name":"merry","isDel":true,"age":30},{"name":"jim","isDel":false,"age":28}]
    字符串转为list:[{date=1525223309870, name=merry, isDel=true, age=30}, {name=jim, isDel=false, age=28}]

    注意:使用JSON.parseArray时,传入list中的泛型

    4、json中日期格式化

    @Test
        public void testDateFormat() {
            Date now = new Date();
            String dateStr = JSON.toJSONString(now);
            System.out.println("默认日期:" + dateStr);
    
            // 按照指定格式格式化日期,格式为yyyy-MM-dd HH:mm:ss
            String dateStr2 = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
            System.out.println("格式化日期:" + dateStr2);
    
            String dateStr3 = JSON.toJSONStringWithDateFormat(now, "yyyy-MM-dd HH:mm");
            System.out.println("格式化日期:" + dateStr3);
        }

    运行结果:

    默认日期:1525223374867
    格式化日期:"2018-05-02 09:09:34"
    格式化日期:"2018-05-02 09:09"

    5、json字符串输出单引号

    @Test
        public void testSingleQuotes() {
            List<Object> list = new ArrayList<>();
            list.add("home");
            list.add("hello");
            list.add(true);
            list.add(45.78);
            String listJson = JSON.toJSONString(list, SerializerFeature.UseSingleQuotes);
            System.out.println("转为单引号字符串:" + listJson);
        }

    运行结果:

    转为单引号字符串:['home','hello',true,45.78]

    6、改变json字符串中默认不输出值为null字段

    @Test
        public void testNull() {
            Map<String, Object> testMap = new HashMap<>();
            testMap.put("name", "merry");
            testMap.put("age", 30);
            testMap.put("date", null);
    
            // 缺省情况下,FastJSON不输入为值Null的字段
            String jsonStr = JSON.toJSONString(testMap);
            System.out.println("转为字符串:" + jsonStr);
    
            String jsonStr2 = JSON.toJSONString(testMap, SerializerFeature.WriteMapNullValue);
            System.out.println("转为字符串:" + jsonStr2);
        }

    运行结果:

    转为字符串:{"name":"merry","age":30}
    转为字符串:{"date":null,"name":"merry","age":30}

    关于SerializerFeature中的常量属性含义,可以参考fastjson SerializerFeature详解

    本文示例源码地址:https://github.com/xuwenjin/xwj_repo/tree/master/xwj-impl

  • 相关阅读:
    zsh(yum装包的时候,有时候会不行)
    an error occurred during the file system check错误的解决
    Linux使用tcpdump命令抓包保存pcap文件wireshark分析
    安装win7或win8系统时UEFI和Legacy模式的设置
    查看LINUX当前负载
    svn update 每更新一项就输出一行信息,使用首字符来报告执行的动作 这些字符的含义是:
    svn分支管理进行迭代开发
    Linux命令行下创建纳入版本控制下的新目录
    svn update -r m path 代码还原到某个版本(这样之前的log日志也就没了,也就是清空log日志)
    二进制日志BINARY LOG清理
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/8978687.html
Copyright © 2020-2023  润新知