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

智能推荐

Chrome 扩展程序——Imagus:图片放大预览工具-程序员宅基地

文章浏览阅读3.3w次,点赞2次,收藏2次。主要介绍 Imagus 的功能及应用,Imagus 是一款简单实用的图片放大预览工具。_imagus

python 描述符_Python黑魔法之描述符-程序员宅基地

文章浏览阅读113次。引言Descriptors(描述符)是Python语言中一个深奥但很重要的一个黑魔法,它被广泛应用于Python语言的内核,熟练掌握描述符将会为Python程序员的工具箱添加一个额外的技巧。本文我将讲述描述符的定义以及一些常见的场景,并且在文末会补充一下__getattr__,__getattribute__,__getitem__这三个同样涉及到属性访问的魔术方法。描述符的定义descr__g..._python revealaccess

jenkins自动化部署及三种构建部署方式_jenkins自动和手动部署-程序员宅基地

文章浏览阅读504次。jenkins自动化部署及三种构建部署方式jenkins是基于java开发的一种持续集成工具,用于监控持续重复的工作,功能包括。1、持续的软件版本发布/测试2、监控外部调用执行项目Jenkins其实很早之前就有了,最近火起来的原因是,大家都在关注devops,关注如何来做持续集成,持续交付,如何来做CI/CD。Jenkins作为持续集成的工具,他其实只是一个平台或者是一个大的框架,它的工作完全就是依靠插件,也就是说你想使用什么功能,你就找到什么样的插件。1.2.jenkins好处1、我在工作中部_jenkins自动和手动部署

GMSK调制解调误码率matlab仿真_gmsk码间干扰-程序员宅基地

文章浏览阅读1.6k次,点赞25次,收藏35次。GMSK(高斯最小频移键控)是一种连续相位的频移键控(CPFSK)调制方法,它在数字通信中得到了广泛应用,特别是在移动通信系统中。GMSK通过限制频率偏差的累积来减少带外辐射,并通过使用高斯滤波器对基带信号进行预调制来平滑相位路径。_gmsk码间干扰

Reader类和Writer类_sreader_writer_uoml-程序员宅基地

文章浏览阅读3k次。从键盘读入用户的输入,并显示在屏幕上1. 效果图2. Java代码package com.example.demo.file;import java.io.InputStreamReader;import java.io.OutputStreamWriter;/** * @Description Reader类和Writer类 * @author 大都督 * @date 2..._sreader_writer_uoml

python编码问题之encode、decode、codecs模块_python中encode在什么模块-程序员宅基地

文章浏览阅读2.1k次。原文链接先说说编解码问题编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 Eg:str1.decode('gb2312') #将gb2312编码的字符串转换成unicode编码str2.encode('gb2312') #将unicode编码..._python中encode在什么模块

随便推点

extjs中treepanel属性和方法_ext.tree.treepanel 展开节点适应宽度-程序员宅基地

文章浏览阅读363次。树控件由Ext.tree.TreePanel类定义,TreePanel类继承自Panel面板。TreePanel是ExtJS中最多能的组件之一,它非常适合用于展示分层的数据。树的使用是很频繁的,对树节点的各种操作已经和数据库的互动操作,这些都是需要掌握的。_ext.tree.treepanel 展开节点适应宽度

ORACLE常用傻瓜问题1000问-程序员宅基地

文章浏览阅读678次。1. oracle安装完成后的初始口令?  internal/oracle   sys/change_on_install   system/manager   scott/tiger   sysman/oem_temp 2. orACLE9IAS WEB CACHE的初始默认用户和密码? administrator/administrator 3. oracle 8.0.5怎么创建数据库?

iOS UISearchBar改变搜索框的颜色_ios searchbar 设置搜索狂颜色-程序员宅基地

文章浏览阅读2.1k次。[objc] view plain copy //搜索框 - (UISearchBar *)searchBar{ if (_searchBar == nil) { _searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 27, KScreenWidth_ios searchbar 设置搜索狂颜色

ADADELTA AN ADAPTIVE LEARNING RATE METHOD_adadelta一种自适应学习率方法-程序员宅基地

文章浏览阅读527次。ADADELTA: AN ADAPTIVE LEARNING RATE METHOD参考:[自适应学习率调整AdaDelta](https://www.cnblogs.com/neopenx/p/4768388.html)我们提出了一种新的梯度下降的逐维学习率方法ADADELTA。该方法仅使用一阶信息随时间动态地适应,并且除了一般的随机梯度下降外,具有最小的计算开销。该方法不需要人工调整学习速率,对噪声梯度信息、不同模型结构选择、不同数据模式和超参数选择具有鲁棒性。与其他方法相比,我们在分布式集群环境下_adadelta一种自适应学习率方法

从零开始一个微信小程序版知乎_微信小程序开发 知乎-程序员宅基地

文章浏览阅读1.5k次。以前工作没直接进行过小程序的开发,最近闲了下来就赶紧学习一下。因为从零开始,所以没有使用任何框架及UI库,记录一下本次开发中踩过的坑吧~展示效果(界面样式设计与交互来自iOS 4.8.0版本知乎App):动态效果请移步到GitHub查看。一、开始前的准备申请账号:根据小程序注册文档,填写信息和提交相应的资料,就可以拥有自己的小程序帐号。开发工具:微信开发者工具数据来源:Easy M..._微信小程序开发 知乎

centos uwsgi配置_在CentOS 7下安装uwsgi_uwsgi离线安装centos-程序员宅基地

文章浏览阅读153次。https://blog.csdn.net/weixin_35886269/article/details/112941217_uwsgi离线安装centos

推荐文章

热门文章

相关标签