GsonUtils和字符串

文章目录

      • 1、GsonUtils
      • 2、String本身,可以加入日志信息
      • 3、 Json和Map转换
      • 4、Date转为Json字符串
      • 5、Json和List<T>转换
      • 6、 比较两个JSON字符串的不同
      • 7、 字符串填充:生成单据号时填充
      • 8、 String.format()的使用
      • 9、截断字符串
      • 10、split
      • isNotBlank 和 isNotEmpty的区别
      • 11、判断字符串是否为Json字符串格式
      • 12、deep copy
      • 补充:关于msyql的Json格式

1、GsonUtils

  • Json字符串转对象
  • 对象转Json字符串
@UtilityClass
@Slf4j
public class GsonUtils {private static final Gson GSON = new Gson();public static String toJsonStr(Object object) {return GSON.toJson(object);}public static String toJsonStr(Object obj, Type type) {return GSON.toJson(obj, type);}public static <T> T fromJson(String json, Class<T> classOfT) {return GSON.fromJson(json, classOfT);}public static <T> T fromJson(String json, Type typeOfT) {return GSON.fromJson(json, typeOfT);}public static String toJson(Object object) {try {return GSON.toJson(object);} catch (Exception e) {log.error("序列化失败", e);}return StringUtils.EMPTY;}
}
  • 工具类使用
String str = "{\"status\":{\"code\":0,\"__isset_bit_vector\":[1]},\"poiId\":1}";TResponse tResponseA = GsonUtils.fromJson(str, TResponse.class);

2、String本身,可以加入日志信息

String.format("Duplicate asyncCreateTask request with requestId=%s, billNo=%s, finish it fast.", request.getRequestId(), request.getNo());

3、 Json和Map转换

map.put("0915", "1");
map.put("0916", "2");
String jsonStr = GsonUtils.toJsonStr(map);
Map<String,String> json2Map = GsonUtils.fromJson(jsonStr,new TypeToken<HashMap<String,String>>(){}.getType());

4、Date转为Json字符串

如果类中有Date类型的属性字段,则需要在创建gson的时候设置一下日期格式Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();System.out.println(gson.toJson(new Date()));

5、Json和List转换

List<SkuDTO> list = GsonUtils.fromJson(jsonStr,new TypeToken<List<SkuDTO>>(){}.getType());List<Long> list2 = GsonUtils.fromJson(Lists.newArrayList(1L,2L), new TypeToken<List<Long>>() {}.getType());

6、 比较两个JSON字符串的不同

public void t() throws JSONException {String s1 = "{\"skuId\":1,\"skuName\":\"test\",\"temp\":2,\"address\":\"bj\"}";String s2 = "{\"skuId\":1,\"skuName\":\"test\",\"temp\":3,\"author\":\"mjp\"}";// 方式一:JSONCompareResult result  = JSONCompare.compareJSON(s1, s2, JSONCompareMode.STRICT);<dependency><groupId>org.skyscreamer</groupId><artifactId>jsonassert</artifactId><version>1.5.1</version><scope>test</scope></dependency>// 1中有2中没有System.out.println(result.isMissingOnField());List<FieldComparisonFailure> fieldMissing = result.getFieldMissing();for (FieldComparisonFailure fieldComparisonFailure : fieldMissing) {System.out.println(fieldComparisonFailure.getExpected());//address}// 2中有1中没有System.out.println(result.isUnexpectedOnField());List<FieldComparisonFailure> fieldUnexpected = result.getFieldUnexpected();for (FieldComparisonFailure fieldComparisonFailure : fieldUnexpected) {System.out.println(fieldComparisonFailure.getActual());//author}// 1中2中都有,但是val值不一样System.out.println(result.isFailureOnField());List<FieldComparisonFailure> list = result.getFieldFailures();for (FieldComparisonFailure fieldComparisonFailure : list) {System.out.println(fieldComparisonFailure.getField());//tempSystem.out.println(fieldComparisonFailure.getActual());//3System.out.println(fieldComparisonFailure.getExpected());//2}// 方式二:HashMap<String, Object> diffMap = Maps.newHashMap();Gson gson = new Gson();Map<String,Object> json1Map = gson.fromJson(s1,new TypeToken<HashMap<String,Object>>(){}.getType());Map<String,Object> json2Map = gson.fromJson(s2,new TypeToken<HashMap<String,Object>>(){}.getType());for (Map.Entry<String, Object> entry : json1Map.entrySet()) {String k1 = entry.getKey();Object v1 = entry.getValue();Object v2 = json2Map.get(k1);// 1中有2中没有if (v2 == null) {diffMap.put(k1, v1);continue;}// 1中2中都有,但是不一样if (!Objects.equals(v1, v2)){diffMap.put(k1, "expect:" + v1 + ", actual:" + v2);}}json2Map.forEach((k2, v2) -> {Object v1 = json1Map.get(k2);// 2中有1中没有if (v1 == null) {diffMap.put(k2, v2);}});System.out.println(diffMap);//{temp=expect:2.0, actual:3.0, address=bj, author=mjp}}

7、 字符串填充:生成单据号时填充

Long billType = 1L;
System.out.println("a" + StringUtils.leftPad(billType + "", 5, "0"));// a00001
即在billType的左侧补0,直到00001形成5位为止
右侧填充和两侧填充api如下:
public static String leftPad(final String str, final int size, String padStr)public static String center(String str, final int size, String padStr)

8、 String.format()的使用

参考:https://blog.csdn.net/lonely_fireworks/article/details/7962171

  • 简单使用
int time = 3;
String nameParis = String.format("达到了最大次数%s次", time);
  • 复杂使用
String contentFormat = "您今天售卖的【%s】支商品有较高可能发生售罄,预估销售损失pcs【%s】件,预估销售损失额【%s" +"】元,需联系补货,请点击“[及时处理|%s]”查看详情。";String url = "sell.out.warning.link:https://xxx.xxx.xxx" + ".com?warnType=%s&categoryId=%s"String result = String.format(contentFormat, skuCount, salePcs.stripTrailingZeros().toPlainString(),saleGmv.stripTrailingZeros().toPlainString(),String.format(url, warnType, categoryId));

1、将warnTpe和categoryId,填充到url中,成为一个完整的连接url

2、sku数,pcs,GMV,及时处理链接url 四个字端值,填充到contentFormat的%s中

9、截断字符串

String s = "大家好才是真的好";
String truncate = StringUtils.truncate(s, 2, 4);
System.out.println(truncate);//好才是真

10、split

https://www.runoob.com/java/java-string-split.html

isNotBlank 和 isNotEmpty的区别

public static boolean isNotEmpty(String str):判断某字符串是否非空,这里不能排除空格字符,即StringUtils.isNotEmpty("  ") = true下面是示例:
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = truepublic static boolean isNotBlank(String str)
判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成,即StringUtils.isNotBlank("  ") = false下面是示例:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false所以,在某些业务场景,用isNotBlank 比 isNotEmpty要好

11、判断字符串是否为Json字符串格式

try {JsonElement parse = new JsonParser().parse(extra);if (parse.isJsonObject() || parse.isJsonArray()) {//YES}
} catch (JsonSyntaxException e) {//ignore
}
// NO

12、deep copy

        // 对象deep copyMyUser myUser = new MyUser();myUser.setSkuId(1L);Gson gson = new Gson();MyUser newUser = gson.fromJson(gson.toJson(myUser), MyUser.class);System.out.println(newUser);myUser.setSkuId(77777777777L);System.out.println(newUser);// 集合deep copyList<MyUser> newList = JSON.parseArray(JSON.toJSONString(list), MyUser.class);//fastjsonSystem.out.println(newList);u1.setSkuId(777777777777777L);System.out.println(newList);

补充:关于msyql的Json格式

将json格式的内容存储mysql,mysql中字段为json而非Varchar

  • 推荐5.7之后直接使用 字段名称 json
  • 一般都用varchar(n) 注:n不要太大。太大的话考虑 JSON

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT学习之创建项目

1、添加快捷键到桌面 找到所在安装路径Qt5.14.1\Tools\QtCreator\bin添加至桌面 双击后打开 2、创建项目 点击下一步 再点击下一步 下一步 当前暂时选择32位&#xff0c;之后点击完成 3、进入编辑页面并运行 运行快捷键&#xff1a;CtrlR 运行界面点击按钮&#xff1a; 运行…

C# 如何使用windows服务做定时任务

在 C# 中&#xff0c;你可以使用 Windows 服务来创建定时任务。以下是创建定时任务的步骤&#xff1a; 创建一个新的 Windows 服务项目&#xff1a; 打开 Visual Studio。选择 “创建新项目”。在搜索框中搜索 “Windows 服务”。选择 “Windows 服务” 模板&#xff0c;并设置…

单臂路由的详细配置步骤

1、单臂路由概述 单臂路由&#xff08;router-on-a-stick&#xff09;是指在路由器的一个接口上通过配置子接口&#xff08;或“逻辑接口”&#xff0c;并不存在真正物理接口&#xff09;的方式&#xff0c;实现原来相互隔离的不同VLAN&#xff08;虚拟局域网&#xff09;之间…

C++笔记之引用折叠规则

C笔记之引用折叠规则 文章目录 C笔记之引用折叠规则1. 当两个左值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。2. 当一个左值引用和一个右值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。3. 当两个右值引用结合在一起时&#xff0c;它们也会折叠成一个右…

【网络协议】Http-上

Http请求结构&#xff1a; 结构图1&#xff1a; 实验解析请求报文&#xff1a; 1.在Edge浏览器上输入ip地址端口号文件资源&#xff0c;也就是下图中的120.XX.139.29:8888/A/B/c.html 2.我的程序接收到了一个没有有效载荷的http请求(呼应上面的结构图1)&#xff0c;如下 GET …

Python机器学习实战-特征重要性分析方法(1):排列重要性(附源码和实现效果)

实现功能 排列重要性 PermutationImportance&#xff1a;该方法会随机排列每个特征的值&#xff0c;然后监控模型性能下降的程度。如果获得了更大的下降意味着特征更重要 实现代码 from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomFore…

C语言之字符函数字符串函数篇(2)

目录 字符串查找 strstr strstr的使用 strstr的模拟实现 分析 考虑点 代码 strt strtok的使用 循环改进 错误信息报告 strerror 错误码的错误信息 strerror的使用 perror 字符操作 字符分类函数 字符转化函数 今天我们接着讲字符串函数&#xff0c;也…

LuatOS-SOC接口文档(air780E)--crypto - 加解密和hash函数

crypto.md5(str) 计算md5值 参数 传入值类型 解释 string 需要计算的字符串 返回值 返回值类型 解释 string 计算得出的md5值的hex字符串 例子 -- 计算字符串"abc"的md5 log.info("md5", crypto.md5("abc"))crypto.hmac_md5(str, k…

balenaEtcher格式化的U盘恢复原来样子

今天用balenaEtcher烧录了U盘&#xff0c;刷机N1盒子openwrt, 刷完机结果发现自己的U盘电脑最后只有167M 想要恢复原来的64G以下是方法&#xff0c;使用win10系统 1、打开命令行cmd&#xff08;winr打开运行&#xff0c;在其中输入cmd就可以打开&#xff09;&#xff1b; 2…

C++QT day11

绘制时钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent>//绘制事件类 #include <QDebug>//信息调试类 #include <QPainter>//画家类 #include <QTimer>//定时器类 #include <QTime> #include &…

Android---打开相机拍照

简单实现打开系统系统相机拍一张图片并显示在UI上&#xff0c;适用与个人主页头像的切换。 1. 添加权限。AndroidManifest.xml里添加使用相机的权限。 <uses-permission android:name"android.permission.CAMERA"/> 2. 布局。布局内容比较交单&#xff0c;一…

leetcode21合并两个有序链表

题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输…

智慧农业农场小程序源码 智慧农场系统源码

智慧农业农场小程序源码 智慧农场系统源码 一、 智慧农场系统的组成 智慧农场系统一般包括传感器、控制器、数据采集与处理平台、应用软件等组成部分。其中, 传感器主要用于采集土壤温度、湿度、光照强度等环境参数,以及作物生长状态、水肥情况等生产信息。控制器则根据传感器…

一个关于 i++ 和 ++i 的面试题打趴了所有人

前言 都说大城市现在不好找工作&#xff0c;可小城市却也不好招人。 我们公司招了挺久都没招到&#xff0c;主管感到有些心累。 我提了点建议&#xff0c;是不是面试问的太深了&#xff0c;在这种小城市&#xff0c;能干活就行。 他说自己问的面试题都很浅显&#xff0c;如果答…

你写过的最蠢的代码是?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Parseval’s Theorem Parseval’s Identity of Fourier Transform

https://www.tutorialspoint.com/parseval-s-theorem-and-parseval-s-identity-of-fourier-transform

使用PCL进行ICP点云配准

下面代码的功能是&#xff1a;把一个文件夹中所有的pcd文件进行ICP点云配准&#xff0c;并且把每帧结果使用PCL的cloud_viewer进行显示。因为是在ROS下使用&#xff0c;所以还有一个ROS的发布操作(可忽略)。   源码如下&#xff1a; #include <iostream> #include <…

最新AI创作系统+ChatGPT网站源码+支持GPT4.0+支持ai绘画+支持国内全AI模型

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢

一、前言 Unity 引擎宣布自 2024 年 1 月 1 日起&#xff0c;将根据游戏安装量对开发者进行收费。官网通知如下 收费模式如图 这张图的大致意思就是&#xff0c; 从2024年1月1日开始&#xff0c;Unity将对所有达标的用户&#xff08;开发者&#xff09;根据游戏安装量征收“安…

ES6-扩展运算符“...“

三个连续的句点 … 称为 “展开运算符” (spread operator)&#xff0c;它可以将数组或对象展开成一个列表或一组键值对,常用于组合两个或多个阵列。 组合数组 const arr1 [1, 2, 3]; const arr2 [...arr1, 4, 5, 6]; // [1, 2, 3, 4, 5, 6] 组合对象 const obj1 {a: 1, …