fastjson2 解决long类型带L尾缀的value

792 篇文章 ¥99.90 ¥299.90

错误json格式案例

{"k":4000L ,"k2":"99L,,,99"}

// 数组L 替换为数字 但是字符串中的不能替换

解决方案

hive udf

public String evaluate(String jsStr, String jsPath) throws Exception {
        // 创建JSON对象 自动解决long类型的值为 100L 这种异常格式
        JSONObject jsonObject =JSON.parseObject(jsStr);
        String s = jsonObject.toString();
        return JSONPath.of(jsPath).extract(JSONReader.of(s)).toString();
    }

### fastjson2 中 `serializeUsing` 的用法及实现细节 在 fastjson2 中,`serializeUsing` 是一个非常重要的注解,用于自定义对象的序列化方式。它允许开发者指定一个特定的序列化器(`ObjectSerializer`),从而控制该对象如何被转换为 JSON 格式。以下是关于 `serializeUsing` 的详细说明和实现细节。 #### 1. 基本概念 `serializeUsing` 是 fastjson2 提供的一个注解,通常用于类或字段上。当 fastjson2 在序列化对象时,如果遇到有此注解的类或字段,它会使用注解中指定的自定义序列化器来完成序列化操作[^5]。 #### 2. 使用示例 以下是一个简单的例子,展示如何通过 `serializeUsing` 自定义序列化逻辑: ```java import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.annotation.JSONType; import com.alibaba.fastjson2.serializer.ObjectSerializer; import com.alibaba.fastjson2.JSONWriter; import java.io.IOException; import java.lang.reflect.Type; // 定义一个自定义的序列化器 class CustomSerializer implements ObjectSerializer { @Override public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) throws IOException { MyObject myObject = (MyObject) object; jsonWriter.writeStartObject(); jsonWriter.writeKeyValue("customField", myObject.getValue() * 2); jsonWriter.writeEndObject(); } } // 定义一个需要序列化的类,并指定自定义序列化器 @JSONType(serializeUsing = CustomSerializer.class) class MyObject { private int value; public MyObject(int value) { this.value = value; } public int getValue() { return value; } } public class Main { public static void main(String[] args) { MyObject obj = new MyObject(10); String jsonString = JSON.toJSONString(obj); System.out.println(jsonString); // 输出: {"customField":20} } } ``` #### 3. 实现细节 - **注解位置**:`serializeUsing` 可以作用于类级别或字段级别。如果作用于类级别,则整个类的序列化行为都会受到指定的序列化器影响;如果作用于字段级别,则仅该字段的序列化行为会被修改。 - **序列化器要求**:自定义的序列化器必须实现 `com.alibaba.fastjson2.serializer.ObjectSerializer` 接口,并重写其 `write` 方法[^6]。 - **序列化流程**:当 fastjson2 遇到有 `serializeUsing` 注解的对象时,它会优先调用指定的序列化器进行处理,而不是使用默认的序列化逻辑。 #### 4. 注意事项 - 自定义序列化器需要确保与目标对象的结构匹配,否则可能导致序列化失败。 - 如果同时存在多个自定义序列化器(例如类级别和字段级别),则字段级别的序列化器会覆盖类级别的设置[^7]。 #### 5. 适用场景 `serializeUsing` 主要适用于以下场景: - 需要对某些复杂对象进行特殊格式的序列化。 - 需要隐藏对象的部分字段或修改字段名称。 - 需要在序列化过程中添加额外的计算逻辑。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas2143

您的打赏是我的动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值