首页 > 其他分享 >JSON中带多余反斜杠?原来是滥用FastJSON造成的!

JSON中带多余反斜杠?原来是滥用FastJSON造成的!

时间:2024-01-05 23:11:28浏览次数:18  
标签:FastJSON 中带 name jsonObject key str 斜杠 put

以前对接很多老系统的接口是发现对方返回的JSON往往有些不太对劲,例如

{
    "key_1":"A",
    "key_2":"{\"name\":\"Tom\"}"
}

由于以前我使用springBoot自带的Jackson,因此从未自己造成这种现象,然而最近在对接一个接口时,我自己使用FastJSON时恰巧就复制了一模一样的bug:

我当时就是把一个解密出来的字符串str作为value,put到JSONObject中,最后返回的jsonObject.toJSONString()就多出反斜杠了,但是刚解密出来的str打印结果是不带反斜杠的。

最开始我甚至以为这是FastJSON的put方法内部给引号前加了反斜杠,还误以为是FastJSON的bug~~~

put的键值对,当value为JSON对象字符串时,必然会携带反斜杠,因为"{"name":"Tome"}"这样的字符串在Java中是会报错的,虽然打印str是不带反斜杠的{"name":"Tome"},但其实际上str本身的庐山真面目是"{\"name\":\"Tom\"}"

最后自己写了如下测试类才恍然大悟,JSON中带多余反斜杠的原因是因为滥用FastJSON

    @Getter
    @Setter
    public class Cat {

        private String name;

        @Override
        public String toString() {
            return "{" + "\"name\":\"" + name + "\"}";
        }
        
    }
    @Test
    void sth(){
        Assertions.assertDoesNotThrow(() -> {
            Cat cat = new Cat();
            cat.setName("Tom");
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("key_1", "A");
//            jsonObject.put("key_2", JSONObject.parseObject(cat.toString()));
            jsonObject.put("key_2", cat.toString());
            log.info("jsonObject {}", jsonObject.toJSONString());
        });
    }

总结:jsonObject.put("key", str);当str是一个JSON对象字符串时就不能将其作为String类型put进去,需要先将其转成JSONObject才是正确的做法jsonObject.put("key", JSONObject.parseObject(str));

标签:FastJSON,中带,name,jsonObject,key,str,斜杠,put
From: https://www.cnblogs.com/ashet/p/17948286

相关文章

  • fastjson2 JSONWriter.Feature介绍
    JSONWriter.Feature介绍FieldBased基于字段反序列化,如果不配置,会默认基于public的field和getter方法序列化。配置后,会基于非static的field(包括private)做反序列化。IgnoreNoneSerializable序列化忽略非Serializable类型的字段BeanToArray 将对象序列为[101,“XX”]这样的数组格......
  • java alibaba fastjson自定义序列化反序列化(教你解决问题思路)
    大家版本不一样方式可能不一样,我不管你的fastjson版本是哪个,按照我这个思路去弄就行写一个JSONObject类,导入fastjson的JSONObject,然后CTRL+鼠标左键点进去看JSONObject源码,然后点击IDEA的左上角selectopenedfile来定位到当前打开的文件。然后看当前目录这边可以看到上面有个Seria......
  • 放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)
    放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)转载自:https://zhuanlan.zhihu.com/p/352485162在上篇《经过多方调研,最终还是决定禁用FastJson!》中,讲了FastJson的基本使用以及存在的不确定性问题,所以最终决定在项目中放弃使用,进而选择市面上比较主流,SpringBoot默......
  • java接口自动化测试实战003----fastjson处理传入参数为JSON格式数据
    一、fastjson概述1、概述   fastjson是阿里爸爸开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。2、常用API   fastjsonAPI入口类是com.alibaba.fastjson.JSON,常......
  • fastjson2
    什么是JSONJSON是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构是的JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON语法使用大括号......
  • Fastjson2基础使用以及底层序列化/反序列化实现探究
    来自于:https://www.cnblogs.com/6b7b5fc3/p/17134421.html1Fastjson2简介Fastjson2是Fastjson的升级版,特征:协议支持:支持JSON/JSONB两种协议部分解析:可以使用JSONPath进行部分解析获取需要的值语言支持:Java/Kotlin场景支持:Android8+/服务端其他特性支持:GraalNative-Image......
  • Gson与FastJson详解
    Gson与FastJson详解Java与JSON做什么?将Java中的对象快速的转换为JSON格式的字符串.将JSON格式的字符串,转换为Java的对象.Gson将对象转换为JSON字符串转换JSON字符串的步骤:引入JAR包在需要转换JSON字符串的位置编写如下代码即可:Stringjson=newGson().toJSON(要......
  • Springboot+FastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool、lombok等所需依赖后。系统需要对接第三方http接口获取返回的数据,并将json数......
  • fastjson反序列化
    前言fastjson是阿里巴巴旗下的一个Java库,用于Java对象和JSON字符串之间的转换。这个库从2017-2022年,陆陆续续爆出了20多个反序列化RCE。官方采用黑名单的方式修复漏洞,这导致出现一系列的bypass==序列化分析packagePojo;importjava.util.Properties;publicclassUser......
  • python 读取文件名中带有循环变量
    标题:Python中使用循环变量读取文件名的方法**摘要:**在Python编程中,我们经常需要读取并处理多个文件。而文件名中的循环变量可以帮助我们更加灵活地处理这种情况。本文将介绍如何使用Python中的循环变量来读取文件名,并给出相关的代码示例和详细说明。1.引言在实际的数据处理中,我......