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

 

posted @ 2018-05-02 09:21  仅此而已-远方  阅读(997)  评论(0编辑  收藏  举报