Map转json是如何保证顺序以及Gson的单例化

5 篇文章 0 订阅
1 篇文章 0 订阅

在使用Redis缓存排序好的列表数据时,想在取数据的时候可以取列表中的某一项,于是决定使用Map来存放,并序列化这个Map. 由于Map本身是没有顺序的约束的。于是决定使用LinkedHashMap来确保key/value存放的顺序。

       但如何将这个LinkedHashMap实例按照LinedHashMap的类型转成Json呢,笔者使用fastjson时,发现其不支持这种情况。经过各种尝试和查询资料,最终使用Gson来进行Java对象和Json String的转换。

gson.fromJson(jsonStr, LinkedHashMap.class);
String json = gson.toJson(jsonObject, LinkedHashMap.class);

调用Gson对象进行转换的地方比较多,如果在调用的地方每次new Gson的话,是比较影响性能的。而Gson本身是线程安全的,即Gson的对象可以被多个线程同时使用,于是在代码中单例化Gson对象势在必行。

笔者倾向于使用如下单例模式来提供该功能

public class GsonUtil
{
    private static class GsonHolder{
        private static final Gson INSTANCE = new Gson();
    }

    /**
     * 获取Gson实例,由于Gson是线程安全的,这里共同使用同一个Gson实例
     */
    public static Gson getGsonInstance()
    {
        return GsonHolder.INSTANCE;
    }
}



     

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值