fastjson如何使用?fastjson使用详解

FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是快,所以在开发中我们会使用到fastjson,那fastjson如何使用?下面来我们就来给大家讲解一下fastjson使用详解。

fastjson使用详解.jpg

FastJson基本使用

将POJO对象转换成Json格式String

JSON.toJSONString(Object)

将Json格式字符串转换成POJO对象

JSON.parseObject(jsonStr, pojoCls)

实例

private static class UserGroup
    {
        private int groupId;
        private String name;
        public int getGroupId()
        {
            return groupId;
        }
        public void setGroupId(int groupId)
        {
            this.groupId = groupId;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
    }
UserGroup userGroup = new UserGroup();
  userGroup.setGroupId(1);
  userGroup.setName("group1");
  //encode
  String jsonValue = JSON.toJSONString(userGroup);
  //decode
  UserGroup group = JSON.parseObject(jsonValue, UserGroup.class);

FastJson自定义序列化与反序列化

1.自定义序列化

a.实现ObjectSerializer

public class OrderActionEnumSerializer implements ObjectSerializer
{
    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException
    {
        SerializeWriter writer = serializer.out;
        OrderActionEnum orderActionEnum = (OrderActionEnum) object;
        writer.write(orderActionEnum.getValue());
    }
}

b.注册序列化接口

SerializeConfig.getGlobalInstance()
    .put(OrderActionEnum.class, new OrderActionEnumSerializer());

2.自定义反序列化

a. 实现反序列化接口

public class OrderActionEnumDeserializer implements ObjectDeserializer
{
    @Override
    public < T > T deserialze(DefaultJSONParser parser, Type type, Object fieldName)
    {
        Integer intValue = parser.parseObject(int.class);
        OrderActionEnum orderActionEnum = OrderActionEnum.getOrderAction(intValue);
        if (orderActionEnum != null)
        {
            return (T) orderActionEnum;
        }
        throw new IllegalStateException();
    }
    @Override
    public int getFastMatchToken()
    {
        return JSONToken.LITERAL_INT;
    }
}

b.注册反序列化

ParserConfig.getGlobalInstance()
    .putDeserializer(OrderActionEnum.class, new OrderActionEnumDeserializer());

3.序列化和反序列化测试

public void test()
    {
        Msg msg = new Msg();
        msg.setBody("hello world");
        msg.setActionEnum(OrderActionEnum.SUC);
        String jsonValue = JSON.toJSONString(msg);
        System.out.println(jsonValue);
        Msg msg2 = JSON.parseObject(jsonValue, Msg.class);
        Assert.assertTrue(msg2.getBody()
            .equals(msg.getBody()));
        Assert.assertTrue(msg2.getActionEnum()
            .equals(msg.getActionEnum()));
        System.out.println(msg2);
    }
public enum OrderActionEnum
{
    FAIL(1, "FAIL")
        , SUC(0, "SUC"), ;
    private int value;
    private OrderActionEnum(int value, String desc)
    {
        this.value = value;
    }
    public int getValue()
    {
        return value;
    }
    public static OrderActionEnum getOrderAction(int value)
    {
        for (OrderActionEnum valueEnm: values())
        {
            if (value == valueEnm.getValue())
            {
                return valueEnm;
            }
        }
        return null;
    }
}
public class Msg
{
    private OrderActionEnum actionEnum;
    private String body;
    public OrderActionEnum getActionEnum()
    {
        return actionEnum;
    }
    public void setActionEnum(OrderActionEnum actionEnum)
    {
        this.actionEnum = actionEnum;
    }
    public String getBody()
    {
        return body;
    }
    public void setBody(String body)
    {
        this.body = body;
    }
}

总之FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean,并且虽然FastJson有漏洞,但是也是开发中重要解析库哦!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

java线程池的最大线程数是多少?java线程池拒绝策略是什么?

java并发面试题有哪些?java并发面试题分享

新手java编程什么软件好?新手java编程有哪些技巧?