JSON格式化和压缩成一行

摘要:把JSON字符串压缩成一行,即去掉中的空格、回车、换行符、制表符等;格式化JSON, 易于阅读。

  JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  无论是数据的传输还是存储,在很多应用场景下,可能想压缩JSON字符串的长度,以提升传输效率。你如果使用的是nosql数据库,可能想进一步的压缩json字符串的长度来节省存储空间,要怎么才能快速的去掉这些空格和换行符等呢?本文介绍如何使用代码去掉字符串里面的空格、回车、换行符、制表符等,但是,删除空格的时候,只删除两个连在一起的空格,不删除两个字符中间的单个字符。例如将如下json压缩成一行:

{
"address":"河南省 商丘师范学院,坐标: x, y",
"name":"JSON String",
"age":"29",
"addressTest":"无对应属性,不转换"
}

压缩后的结果:

{"name":"JSON String","age":"29","address":"河南省 商丘师范学院,坐标: x, y","addressTest":"无对应属性,不转换"}

JSON工具类

   定义JSON工具类JsonUtil:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.lang3.StringUtils; import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 格式化json<br/>
* java去掉String里面的空格、回车、换行符、制表符等
* @Author: Wiener
* @Date: 2021/9/25 19:52
*/
public class JsonUtil {
public static final String EMPTY = "";
/**
* 替换所有空格,留下一个
*/
private static final String REPLACE_BLANK_ENTER = "\\s{2,}|\t|\r|\n";
private static final Pattern REPLACE_P = Pattern.compile(REPLACE_BLANK_ENTER);
/**
* 使用正则表达式删除字符串中的空格、回车、换行符、制表符
* @param str
* @return
*/
public static String replaceAllBlank(String str) {
String dest = "";
if (StringUtils.isNotBlank(str)) {
Matcher m = REPLACE_P.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
/**
* 去除字符串中的空格、回车、换行符、制表符
* \n 回车(\u000a)
* \t 水平制表符(\u0009)
* \s 空格(\u0008)
* \r 换行(\u000d)
* @param source
* @return
*/
public static String replaceBlank(String source) {
String ret = EMPTY;
if (StringUtils.isNotBlank(source)) {
ret = source.replaceAll(StringUtils.LF, EMPTY)
.replaceAll("\\s{2,}", EMPTY)
.replaceAll("\\t", EMPTY)
.replaceAll(StringUtils.CR, EMPTY);
}
return ret;
} /**
* 使用fastjson JSONObject格式化输出JSON字符串
* @param source
* @return
*/
public static String formatJson(String source) {
JSONObject object = JSONObject.parseObject(source);
String pretty = JSON.toJSONString(object, SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteDateUseDateFormat);
return pretty;
}
public static String formatJsonOneRow(String source) {
JSONObject object = JSONObject.parseObject(source);
String pretty = JSON.toJSONString(object, SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteDateUseDateFormat);
return pretty;
}
public static void main(String[] args) {
String source = "{\"name\":\"JSON String\",\"age\":\"29\",\"address\":\"河南省 商丘师范学院,坐标: x, y\",\"addressTest\":\"无对应属性,不转换\"}";
System.out.println("-------formatJson---------");
System.out.println(formatJson(source));
System.out.println("-------replaceBlank---------");
System.out.println(replaceBlank(source));
System.out.println("-------replaceAllBlank---------");
System.out.println(replaceAllBlank(source));
}
}

测试结果如下:

-------formatJson---------
{
"address":"河南省 商丘师范学院,坐标: x, y",
"name":"JSON String",
"age":"29",
"addressTest":"无对应属性,不转换"
}
-------replaceBlank---------
{"name":"JSON String","age":"29","address":"河南省 商丘师范学院,坐标: x, y","addressTest":"无对应属性,不转换"}
-------replaceAllBlank---------
{"name":"JSON String","age":"29","address":"河南省 商丘师范学院,坐标: x, y","addressTest":"无对应属性,不转换"}

小结

  工作中处处都需要学习,有时候看似简单的一个优化,可以让你深入学习后收获各种知识。所以在学习中要不求甚解,不仅要了解这个知识点,也要熟悉为什么要这么做。知行合一:学习完一个知识点要尽量及时实践,这样才能记得牢靠。

Reference

JSON格式化和压缩成一行的更多相关文章

  1. 记一个在线工具网站,程序员必备,json格式化、压缩、转义,加解密 编码解码

    简用-在线工具箱-简单易用-工具大全 提供 json格式化,json代码压缩,json校验解析,json数组解析,json转xml,xml转json,json解析,json在线解析,json在线解析及 ...

  2. html 压缩成一行

    文章java gulp-htmlmin 减少下载的时间

  3. Asp.net WebAPi gzip压缩和json格式化

    现在webapi越来越流行了,很多时候它都用来做接口返回json格式的数据,webapi原本是根据客户端的类型动态序列化为json和xml的,但实际很多时候我们都是序列化为json的,所以webapi ...

  4. HTML-DEV-ToolLink(常用的在线字符串编解码、代码压缩、美化、JSON格式化、正则表达式、时间转换工具、二维码生成与解码等工具,支持在线搜索和Chrome插件。)

    HTML-DEV-ToolLink:https://github.com/easonjim/HTML-DEV-ToolLink 常用的在线字符串编解码.代码压缩.美化.JSON格式化.正则表达式.时间 ...

  5. 表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这种写法就是把组件嵌套改为配置方式

    表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这 ...

  6. js中Json字符串如何转成Json对象(4种转换方式)

    js中Json字符串如何转成Json对象(4种转换方式) 一.总结 一句话总结:原生方法(就是浏览器默认支持的方法) 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie ...

  7. yformater - chrome谷歌浏览器json格式化json高亮json解析插件

    yformater是一款chrome浏览器插件,用来格式化(高亮)服务端接口返回的json数据. 实际上小菜并不是第一个写这种插件的,但是现有的chrome json格式化插件实在是不太好用,索性小菜 ...

  8. JSON格式化与serialize序列化

    一.JSON格式化 1. JSON是什么 JSON是一种数据的存储格式,用来沟通客户端Javascript和服务端PHP的交互.我们把用PHP生成JSON后的字符串传给前台Javascript,Jav ...

  9. JSON格式化 JSON美化 输出到html

    {"promotion_details":{"promotion_detail":[{"discount_fee":"22.20& ...

  10. json格式化和查看工具

    以前一直以来都觉得xml个可读性要比json的可读性好,后来使用了JSON Viewer这个小工具之后,发现自己错了.之前认为json的可读性差,完全是因为没有很好的查看工具.JSON Viewer这 ...

随机推荐

  1. Ollama+DeepSeek+SlackBot

    技术背景 想必最近有在部署DeepSeek大模型的人,看标题就知道这篇文章在做什么事情了.由于Ollama对于IP的监听缺乏安全防护,并且内网部署的Ollama模型对于外网来说也是不可见的,而如果使用 ...

  2. Apache Tomcat RCE漏洞复现(CVE-2025-24813)

    漏洞描述 该漏洞的核心在于不完整PUT请求上传时 Tomcat 会使用了一个基于用户提供的文件名和路径生成的临时文件,且路径分隔符被替换为 . . 若同时满足以下条件,攻击者可执行任意代码: 默认 S ...

  3. websocket: the client is not using the websocket protocol: ‘upgrade’ token not found in ‘Connection’ head,客户端没有使用websocket协议:'upgrade'令牌未在'Connection'头中找到

    错误分析 websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connec ...

  4. Docker IPv6 网络环境配置

    由于目前Docker 在IPv6网络中运行的相关配置并非默认自动生成的,所以需要大家根据自己的网络环境来具体做一些相应配置,具体如下: 本次操作是在 Ubuntu16/18或者CentOS7 OS上面 ...

  5. 容器一直处于Create状态

    通过命令排查 docker inspect b5be1d9e71de报错 "Error": "Could not attach to network fabric-tbc ...

  6. 探秘Transformer系列之(16)--- 资源占用

    探秘Transformer系列之(16)--- 资源占用 目录 探秘Transformer系列之(16)--- 资源占用 文章总表 0x00 概述 0x01 背景知识 1.1 数据类型 1.2 进制& ...

  7. 【Unity3D】把相机视角放置到编辑器当前位置视角

    [Unity3D]把相机视角放置到编辑器当前位置视角 零.问题 Unity开发过程中,经常要将相机调整值对应位置,但是通过数值来调有时候不怎么方便,有什么方法可以快速让相机的视角与编辑器当前视角同步呢 ...

  8. study Rust-4【所有权】这个太重要了!

    由于Rust内存垃圾自动回收,那就得搞清楚这个所有权玩意.这个太重要了.因为关系到贯穿于你以后的程序编写. 几个概念: 一.移动 1.咱们一般语言,自己申请内存,自己管理和释放.就是new和free. ...

  9. FireDAC开发DataSnap应用系统【2】-使用TFDJSONDatasets功能

    类别 说明 TFDJSONDatasets FireDAC使用JSONDataSet,其中可包括多个DataSet对象 TFDJSONDataSetsWriter 把TDataSet写入TFDJSON ...

  10. 洛谷P4198 楼房重建 题解

    Part1.自己一开始是怎么想的 我一开始的想法是先考虑什么情况下是看不见的. 如果是 \(i < j\) 的话可以直接看 \(j\) 的斜率和 \(i\) 的斜率就是比较 \(\frac{h_ ...