zoukankan      html  css  js  c++  java
  • JSON格式化和压缩成一行

    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,}|	|
    |
    ";
        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;
        }
        /**
         * 去除字符串中的空格、回车、换行符、制表符
         *     
     回车(u000a)
         *     	 水平制表符(u0009)
         *     s 空格(u0008)
         *     
     换行(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


      读后有收获,小礼物走一走,请作者喝咖啡。

    赞赏支持

  • 相关阅读:
    js html5 绘制折线图
    软件资源下载链接
    二维vector容器读取txt坐标
    C++ opencv 滑动条 Trackbary以及处理三通道和单通道图像
    C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind
    opencv-将分离合并图像(Red通道>125置255<=置0)
    C++ vector类型要点总结(以及各种algorithm算法函数)
    C++容器嵌套实现动态二维数组(Vector2D)
    用vector实现二维向量
    C++标准库vector及迭代器
  • 原文地址:https://www.cnblogs.com/east7/p/15358112.html
Copyright © 2011-2022 走看看