fastJson字符串出现反斜杠问题解决_fastjson数组转为字符串有斜杠-程序员宅基地

技术标签: exception  java基础  fastjson  反斜杠问题  

使用fastJson导入的pom依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.68</version>
    <scope>compile</scope>
</dependency>

代码展示

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import org.apache.commons.lang.StringEscapeUtils;

/**
 * @Desc
 * @Author madengling
 * @Time 2020/10/22 10:48
 */
public class jsonTest {
    
    public static void main(String[] args) {
    
        String str = "{\"ctime\":\"20200518\",\"project\":{\"name\":\"zhangsan\",\"age\":\"25\"},\"content\":{\"distinct_id\":\"51818968\",\"event\":\"AppClick\",\"properties\":{\"element_page\":\"新闻列表页\",\"screen_width\":\"640\",\"app_version\":\"1.0\",\"os\":\"GNU/Linux\",\"battery_level\":\"11\",\"device_id\":\"886113235750\",\"client_time\":\"2020-05-18 13:53:56\",\"ip\":\"61.233.88.41\",\"is_charging\":\"1\",\"manufacturer\":\"Apple\",\"carrier\":\"中国电信\",\"screen_height\":\"320\",\"imei\":\"886113235750\",\"model\":\"\",\"network_type\":\"WIFI\",\"element_name\":\"tag\"}}}\n";
        //将json字符串解析为json对象
        JSONObject metaJson = JSONObject.parseObject(str);
        System.out.println("=====metaJson:");
        System.out.println(metaJson);
        JSONObject jsonObject = new JSONObject();
        //当值为单个字符串时,使用JSONObject对象.getString(key)方法,json对象输出时没有反斜杠
        jsonObject.put("ctime", metaJson.getString("ctime"));
        //当值为json字符串时,使用JSONObject对象.getString(key)方法,json对象输出时带有反斜杠
        jsonObject.put("project", metaJson.getString("project"));
        //当值为json字符串时,使用JSONPath.eval(JSONObject对象,key),json对象输出时没有反斜杠,
        jsonObject.put("content", JSONPath.eval(metaJson, "content"));
        System.out.println("=====jsonObject:");
        System.out.println(jsonObject.toString());

        JSONObject jsonObject1 = new JSONObject();
        System.out.println("=====metaJson.getString(project):");
        System.out.println(metaJson.getString("project"));
        String metaJsonString = metaJson.getString("project");
        jsonObject1.put("propjectString",metaJsonString);
        JSONObject metaJsonJson = JSONObject.parseObject(metaJson.getString("project"));
        jsonObject1.put("propjectJson",metaJsonJson);
        JSONObject metaJsonJson1 = (JSONObject) metaJson.get("project");
        jsonObject1.put("propjectJson1",metaJsonJson1);
        JSONObject metaJsonJson2 = metaJson.getJSONObject("project");
        jsonObject1.put("propjectJson2",metaJsonJson2);
        Jtcyxx boy = new Jtcyxx();
        boy.setGx(1);
        boy.setXm("张三");
        boy.setYddh("196513");
        jsonObject1.put("project", boy);
        System.out.println("=====jsonObject1:");
        System.out.println(jsonObject1.toString());

        System.out.println("=====tmp:");
        String tmp = StringEscapeUtils.unescapeJavaScript(jsonObject.toString());
        System.out.println(tmp);
    }
}

经过测试,通过getString获取json后直接放在value位置时出现反斜杠。同时如果单独对这个json进行输出的话是没有反斜杠的,或者自定义一个对象放在value上也不会出现反斜杠现象。以及将这个对象通过除了getString之外的方法获取数据时,都不会出现反斜杠的现象。
注意:用get方法强转成(JSONObject)在没有getJSONObject()情况下正常显示,两个一起的时候会出现显示对象类的情况,暂时没找到原因,只能避免这种情况
执行结果
在这里插入图片描述
遇到这种问题的时候,可以从两方面进行解决,
一是从源头生成结果的时候解决,避免getString结果放入json中产生反斜杠
二是处理产生的结果,可以用StringEscapeUtils.unescapeJavaScript(String str)方法处理掉反斜杠

我是因为调用别人的方法接收到参数即是如此,从网上找到的大多数都是用replaceAll("\"","")这样的方法,感觉不是很高大上,哈哈,百度了好久,找到了unescapeJavaScript的解决办法

参考文档:
https://blog.csdn.net/programmer_trip/article/details/108350128
https://www.csdn.net/gather_21/Mtjacg2sODg5NDAtYmxvZwO0O0OO0O0O.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39548700/article/details/109218522

智能推荐

linux下编译GDAL外加扩展格式支持(五)--完-程序员宅基地

文章浏览阅读229次。接1、2、3、4篇。10、安装mysql支持安装fedora15或者16系统时若选择安装mysql数据库,则必须自行安装mysql开发包。因为自带默认数据库不会安装这个包。否则会遇到mysql错误:ogr_mysql.h:34:23: fatal error: my_global.h: No such file or directory#问题原因:找不到mysql头文件..._linux gdal netcdf5

Linux tc qdisc 模拟网络丢包延时-程序员宅基地

文章浏览阅读1.2k次。Linux tc qdisc 模拟网络丢包延时_tc qdisc

linux64bit 安装 jdk 1.7-程序员宅基地

文章浏览阅读336次。linux64bit 安装 jdk 1.7下载地址 : https://edelivery.oracle.com/otn-pub/java/jdk/7u21-b11/jdk-7u21-linux-x64.rpm0. 卸载rpm版的jdk: #rpm -qa|grep jdk 显示:jdk-1.6.0_10-fcs 卸载:#rpm -e --nodep..._liunx64位得jdk1.7

【Linux笔记】-----Nginx/LVS/HAProxy负载均衡的优缺点_中间件应用场景nginx lvs proxy-程序员宅基地

文章浏览阅读552次。开始听到负载均衡的时候,我第一反应想到的是链路负载均衡,在此之前主要是在学习网络方面知识,像在NA、NP阶段实验做链路负载均衡时常会遇到,后来还接触到SLB负载分担技术,这都是在链路基础上实现的。 其实负载均衡可以分为硬件实现负载均衡和软件实现负载均衡。 硬件实现负载均衡:常见F5和Array负载均衡器,配套专业维护服务,但是成本昂贵。 软件实现负载均衡:常见开源免费的负载均衡软件有Ngin..._中间件应用场景nginx lvs proxy

多维时序 | MATLAB实现CNN-LSTM多变量时序预测_cnn可以进行多步预测-程序员宅基地

文章浏览阅读4.7k次。多维时序 | MATLAB实现CNN-LSTM多变量时序预测目录多维时序 | MATLAB实现CNN-LSTM多变量多步预测基本介绍模型特点程序设计学习总结参考资料基本介绍本次运行测试环境MATLAB2020b,MATLAB实现CNN-LSTM多变量多步预测。模型特点深度学习使用分布式的分层特征表示方法自动提取数据中的从最低层到最高层固有的抽象特征和隐藏不变结构. 为了充分利用单个模型的优点并提高预测性能, 现已提出了许多组合模型。CNN 是多层前馈神经网络, 已被证明在提取隐藏_cnn可以进行多步预测

随便推点

【9.3】用户和组的管理、密码_polkitd:input 用户和组-程序员宅基地

文章浏览阅读219次。3.1 用户配置文件和密码配置文件3.2 用户组管理3.3 用户管理3.4 usermod命令3.5 用户密码管理3.6 mkpasswd命令_polkitd:input 用户和组

pca算法python代码_三种方法实现PCA算法(Python)-程序员宅基地

文章浏览阅读670次。主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域。它的主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。关于PCA的更多介绍,请参考:https://en.wikipedia.org/wiki/Prin..._inprementation python code of pca

内存地址Linux下内存分配与映射之一-程序员宅基地

文章浏览阅读35次。发一下牢骚和主题无关:地址类型:32位的cpu,共4G间空,其中0-3G属于用户间空地址,3G-4G是内核间空地址。用户虚拟地址:用户间空程序的地址物理地址:cpu与内存之间的用使地址总线地址:外围总线和内存之间的用使地址内核逻辑地址:内存的分部或全体射映,大多数情况下,它与物理地址仅差一个偏移量。如Kmalloc分..._linux 内存条与内存地址

自动化测试介绍_自动化测试中baw库指的什么-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏16次。什么是自动化测试?   做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。  首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于_自动化测试中baw库指的什么

a0图框标题栏尺寸_a0图纸尺寸(a0图纸标题栏尺寸标准国标)-程序员宅基地

文章浏览阅读1.6w次。A0纸指的是一平方米大小的白银比例长方形纸(长为1189mm宽为841mm)。A0=1189mm*841mm A1=841mm*594mm 相当于1/2张A0纸 A2=594mm*420mm 相当于1/4.A1图纸大小尺寸:841mm*594mm 即长为841mm,宽为594mm 过去是以多少"开"(例如8开或16开等)来表示纸张的大小,我国采用国际标准,规定以 A0、A1、A2、.GB/T 14..._a0图纸尺寸

TreeTable的简单实现_treetable canvas-程序员宅基地

文章浏览阅读966次。最终效果图:UI说明:针对table本身进行增强的tree table组件。 tree的数据来源是单元格内a元素的自定义属性:level和type。具体代码如下:Java代码 DepartmentEmployeeIDposi_treetable canvas