首页 > 其他分享 >Json 序列化、反序列化;重复或循环使用时注意事项

Json 序列化、反序列化;重复或循环使用时注意事项

时间:2024-07-29 12:39:23浏览次数:10  
标签:PluginSdkModel pluginSdkModel Json 123 sdkId 注意事项 序列化 objectMapper

Json序列化问题

public class Test2 {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        PluginSdkModel pluginSdkModel = new PluginSdkModel();

        for (int i = 0; i < 3; i++) {
            pluginSdkModel.setSdkId(123L);
            if(i == 1){
                pluginSdkModel.setModelDesc("wokao");
            }
            System.out.println(objectMapper.writeValueAsString(pluginSdkModel));
        }
    }
}

输出:

{"sdkId":123}
{"sdkId":123,"modelDesc":"wokao"}
{"sdkId":123,"modelDesc":"wokao"}

可以看到 第三个结果页输出了 modeDesc,原因是 序列化的时候,是把 对象的值 序列化成字符串,无法先把对象的值清空,所以 序列化 每次 初始化 object 是不现实的,也是无法 解决的问题;需要开发人员自己 优化代码来解决,比如上面的 代码 可以修改下:

        for (int i = 0; i < 3; i++) {
            pluginSdkModel.setSdkId(123L);
            if(i == 1){
                pluginSdkModel.setModelDesc("wokao");
            }else { //这里加上 else 就可以解决 这个问题,否则 json框架是无法解决的
                pluginSdkModel.setModelDesc(null);
            }
            System.out.println(objectMapper.writeValueAsString(pluginSdkModel));
        }

Json 反序列化问题

序列化时,无法 先把 对象的值 修改成 null,再序列化;那么反序列化呢,发序列化 字符串 ---> object的过程,是可以先把 object清空,然后在序列化的;

Jackson 也 如我们预想的那样,做了这件事,这样可以有助于 最大化 帮住开发者减少bug;

public class Test {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        PluginSdkModel pluginSdkModel = new PluginSdkModel();

        String json1 = "{\"sdkId\":123}";
        String json2 = "{\"sdkId\":123,\"modelDesc\":\"wokao\"}";

        for (int i = 0; i < 2; i++) {
            pluginSdkModel = objectMapper.read(json2, PluginSdkModel.class);

            System.out.println(objectMapper.writeValueAsString(pluginSdkModel));

            pluginSdkModel = objectMapper.readValue(json1, PluginSdkModel.class);

            System.out.println(objectMapper.writeValueAsString(pluginSdkModel));
        }
    }
}

输出:

{"sdkId":123,"modelDesc":"wokao"}
{"sdkId":123}
{"sdkId":123,"modelDesc":"wokao"}
{"sdkId":123}

可以看到 objectMapper.readValue(json2, PluginSdkModel.class); 时,每次 产生一个 全新的 pluginSdkModel,在Java里 是 内存自动管理的,可以这么搞,在Delphi里 不方便这么搞,但是 可以 反序列化时,清空 源 object 里的 每一个字段;从而帮助开发者减少bug,实现与Java里 一样的效果;

标签:PluginSdkModel,pluginSdkModel,Json,123,sdkId,注意事项,序列化,objectMapper
From: https://www.cnblogs.com/del88/p/18329843

相关文章

  • 使用“marshmallow-sqlalchemy”时发生错误,异常:反序列化需要会话
    使用marshmallow-sqlalchemy反序列化对象,但出现错误。我已经通过了session对象,也就是数据库DB,但是还是没有效果,这个问题已经2天了,依然无法解决。my_db.pyfromsqlalchemyimportcreate_enginefromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.o......
  • C/C++ 头文件注意事项总结
    C/C++头文件在编程中扮演着至关重要的角色,它们用于声明函数、类、宏、常量等,使得这些声明可以在多个源文件中共享。然而,在使用头文件时,需要注意一些关键事项以避免编译错误、提高代码的可维护性和可读性。以下是一些关于C/C++头文件使用的注意事项:1.防止头文件重复包含头文......
  • js实现JSON数据根据某个字段排序
    1、js含有内置的sort()方法该方法是按字母顺序对数组进行排序的即按照字符编码进行排序,当数组中元素为数字类型时,排序结果与我们设想的完全不同,因为默认是按照字符编码的顺序进行排序的2、实现/**@description根据某个字段实现对json数组的排序*@para......
  • 将 JSON 发送到 Flask,request.args 与 request.form
    我的理解是,request.argsFlask中包含来自GET请求的URL编码参数,而request.form包含POST数据。我很难理解为什么在发送POST请求时,尝试使用request.form访问数据会返回400错误,但是当我尝试使用request.args......
  • 日常学习--调用第三方接口和提供第三方接口时的注意事项--20240728
    1、调用第三方接口的注意事项   接口测试与验证:对第三方接口进行充分的测试,包括功能测试、性能测试和安全测试,确保接口的稳定性和安全性。 验证接口的可用性,包括接口地址、请求方式、请求参数、响应格式等是否正确。   参数校验与日志记录:在调用接口前,对请求......
  • Python 请求 - response.json() 未按预期工作
    我正在尝试从Python的requests模块调用API。在邮递员上,返回的响应标头中的Content-Type是application/json;charset=utf-8,响应json数据是我期望的样子。但是,在python上的API的get方法之后运行response.json()会抛出错误simplejson.errors......
  • python---json文件写入
    ​ 使用到的知识点:os模块执行linux指令、json.dump()、withopenasf代码实现importsysimportosimportjson #向json文件file中添加内容data,其中data的类型为字典defwrite_json(file,data):    #如果文件存在,则删除    if(os.path.exists(fi......
  • fastjson反序列化漏洞原理及<=1.2.24&<=1.2.47&Fastjson v1.2.80简单利用&不出网判断&修
    1、什么是fastjsonfastjson是一个有阿里开发的一个开源Java类库,可以将Java对象转换为JSON格式(序列化),当然它也可以将JSON字符串转换为Java对象(反序列化)。2、漏洞原理FastJson在解析json的过程中,⽀持使⽤autoType来实例化某⼀个具体的类,并调⽤该类的set/get⽅法......
  • kettle从入门到精通 第八十一课 ETL之kettle kettle中的json对象字段写入postgresql中
    1、上一节可讲解了如何将json数据写入pg数据库表中的json字段,虽然实现了效果,但若客户继续使用表输出步骤则仍然无法解决问题。正确的的解决方式是设置数据库连接参数stringtype=unspecified2、stringtype=unspecified参数的作用:当设置为 unspecified 时,pgJDBC驱动将根据数......
  • kettle从入门到精通 第八十课 ETL之kettle kettle中的json对象字段写入postgresql中的
    场景:源数据库表为mysql的其中有json字段,通过kettle查询出来插入到目标数据库postgresql中,对应的表中也有json字段。。但是报错,提示kettle查询出来是varchar的的字段,无法插入到目标数据库中。1、创建测试表。CREATETABLEt3(idint,nameJSON);2、测试mysql......