fastjson 替换超大的JSON对象中的key优化

遇到一个处理超大json(接近2w行)的问题,原有处理代码效率比较低下,耗时10几秒,业务要求耗时越短越好。

思维转换:一般的思维是遍历json的所有字段,对符合条件的进行转换,但是效率低下,还有大量的正则匹配操作。
逆向思维,只对配置中指定的字段进行转换,非配置中的直接跳过,可以大幅提升速度。

原有json格式如下:

{
    "a": {
        "b": [
            {
                "c": {
                    "c1": "NT",
                    "c2": "24",
                    "c3": "76413",
                    "c4": "2026-06-24"
                }
            }
        ]
    }
}

配置文件格式如下:

a=A
a.b= B
a.b.c= C
a.b.c.c1= C1
a.b.c.c2= C2
a.b.c.c3= C3
a.b.c.c4= C4

要求替换整个json的路径如下:

{
    "A": {
        "B": [
            {
                "C": {
                    "C1": "NT",
                    "C2": "24",
                    "C3": "76413",
                    "C4": 1548950400000
                }
            }
        ]
    }
}

并且需要对C4即月份的字段进行时间转换。
因为json非常长,原来对value进行解析的逻辑是逐个字段进行正则匹配判断是否是月份,所以导致效率非常低。

优化以后建立映射字段,存储月份对应的码值,遇到对应码值直接返回,原来正则表达式没有进行预编译,所以效率低下。

 /**
     * 月份字段对应码值
     */
    public static final Set<String> MOUTH_CODE = new HashSet<>();
    static {
        MOUTH_CODE.add("C4");
        MOUTH_CODE.add("D4");
        MOUTH_CODE.add("E4");
        MOUTH_CODE.add("F4");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值