当前位置: 首页 > news >正文

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术

开源技术栏

对象/变量格式化工具库,其支持将一个对象进行按照 JSON XML HTML 等格式进行转换,并获取到结果字符串!

目录

文章目录

  • varFormatter 数据格式化 技术
    • 目录
    • 介绍
      • 获取方式
    • 使用实例
      • 格式化组件的基本使用
        • 获取到格式化组件
        • 格式化一个任意类型的对象
        • 格式化一个Map对象
        • 格式化一个 DataObj 对象
        • 格式化一个 XmlNodeObj 对象
      • 各类格式化组件的使用
        • xml 格式化组件演示实例
        • html 格式化组件演示实例
    • 更新记录
      • 2024-03-01

在这里插入图片描述

介绍

通过此库,您可以实现将一个任意类型的对象进行按照 JSON XML HTML 等格式进行转换,并获取到结果字符串,是非常方便的数据对象格式化工具库,其具有强大的性能和类反射的缓存机制,能够不进行过多的解析和转换!

获取方式

您可以直接通过 maven 获取到此库的依赖,下面是一个依赖的实例。


<dependencies><!-- 引入库的依赖 --><dependency><groupId>io.github.BeardedManZhao</groupId><artifactId>varFormatter</artifactId><version>1.0</version></dependency><!-- 引入库所需要的工具类 --><dependency><groupId>io.github.BeardedManZhao</groupId><artifactId>zhao-utils</artifactId><version>1.0.20240121</version></dependency>
</dependencies>

使用实例

格式化组件的基本使用

在下面我们将使用各种 varFormatter 进行一些对象的格式化操作!

获取到格式化组件

在这里我们提供了一个实例,在实例中,通过 VarFormatter 获取到了 json 格式化组件,并演示了 getFormatter(boolean) 函数中的形参的作用!

import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;public class Test {public static void main(String[] args) {// 使用单例模式 获取到 json 格式化组件final Formatter formatter0 = VarFormatter.JSON.getFormatter(true);// 使用单例模式 再次获取到 json 的格式化组件final Formatter formatter1 = VarFormatter.JSON.getFormatter(true);// 使用多例模式 获取到 json 格式化组件final Formatter formatter2 = VarFormatter.JSON.getFormatter(false);// 判断三个组件的内存地址是否相同// 结论 单例获取到的都是同一个内存地址的组件System.out.println(formatter0 == formatter1);System.out.println(formatter0 == formatter2);System.out.println(formatter1 == formatter2);}
}
格式化一个任意类型的对象

在此库中,我们提供了一个 format(Object) 函数,可以将任意类型的对象进行格式化!其基于反射+缓存机制,相同对象的结构只会被解析一次!

import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;import java.util.ArrayList;
import java.util.HashMap;/*** 测试类** @author zhao*/
public class Test {public static void main(String[] args) {// 使用单例模式 获取到 json 格式化组件final Formatter formatter0 = VarFormatter.JSON.getFormatter(true);// 实例化两个 TestObj 对象TestObj testObj1 = new TestObj();TestObj testObj2 = new TestObj();// 修改第二个对象中的 age 为 2048testObj2.age = 2048;// 将两个对象进行格式化操作 获取到对象的 json 结构System.out.println(formatter0.format(testObj1));System.out.println(formatter0.format(testObj2));}// 准备了一个复杂的类static class TestObj {String name = "zhao";int age = 1024;HashMap<String, Object> data = new HashMap<>();TestObj2 testObj2 = new TestObj2();{data.put("k", 123123);data.put("k1", "123123");}public static class TestObj2 {String name = "zhao123";ArrayList<Integer> arrayList = new ArrayList<>();{arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);}}}
}

下面就是格式化的两个 json 的结果

{"data": {"k1": "123123","k": 123123},"name": "zhao","age": 1024,"testObj2": {"name": "zhao123","arrayList": [1,2,3,4]}
}
{"data": {"k1": "123123","k": 123123},"name": "zhao","age": 2048,"testObj2": {"name": "zhao123","arrayList": [1,2,3,4]}
}
格式化一个Map对象

当我们的对象是一个 Map 对象时,我们可以通过 format(Map) 函数进行格式化,此方法具有更快的速度,能够实现更加稳定和快速的功能。

import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;import java.util.HashMap;/*** 测试类** @author zhao*/
public class Test {public static void main(String[] args) {// 创建一个 Map 对象final HashMap<String, Object> hashMap = new HashMap<>();hashMap.put("age", 21);hashMap.put("name", "ly");// 再创建一个 Map 对象final HashMap<String, Object> hashMap1 = new HashMap<>();hashMap1.put("age", 22);hashMap1.put("name", "ty");// Map 中再嵌套一个子MaphashMap.put("friend", hashMap1);// 使用单例模式 获取到 json 格式化组件final Formatter formatter0 = VarFormatter.JSON.getFormatter(true);// 直接根据 Map 对象进行格式化System.out.println(formatter0.format(hashMap));}
}

下面就是格式化的结果

{"name": "ly","friend": {"name": "ty","age": 22},"age": 21
}
格式化一个 DataObj 对象

此对象是一个内置的数据节点类,可以直接被解析成为一种 Map 的方式来进行格式化,不需要进行任意的结构解析和反射操作,因此性能较号。

import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;/*** 测试类** @author zhao*/
public class Test {public static void main(String[] args) {// 获取到 json 格式化组件final Formatter formatter = VarFormatter.JSON.getFormatter(true);// 将 对象转为 json 格式System.out.println(formatter.format(new TestObj()));// 获取到 xml 格式化组件final Formatter formatter1 = VarFormatter.XML.getFormatter(true);// 将 对象转为 xml 格式System.out.println(formatter1.format(new TestObj()));// 获取到 html 格式化组件final Formatter formatter2 = VarFormatter.HTML.getFormatter(true);// 将 对象转为 html 格式System.out.println(formatter2.format(new HtmlObj()));}static class HtmlObj {String h1 = "大标题";String h2 = "小标题";List<li> ul = new ArrayList<>();{ul.add(new li());ul.add(new li());ul.add(new li());}static class li {String li = "行数据";}}static class TestObj {String name = "zhao";int age = 1024;HashMap<String, Object> data = new HashMap<>();TestObj2 testObj2 = new TestObj2();{data.put("k", 123123);data.put("k1", "123123");}public static class TestObj2 {String name = "zhao123";ArrayList<Integer> arrayList = new ArrayList<>();{arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);}}}
}
格式化一个 XmlNodeObj 对象

XmlNodeObjDataObj 的子类,其具有DataObj 的所有特点,但是其还具有属性的功能,它能够接收一些属性,格式化组件会按照这个属性自动构造数据。

import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;
import top.lingyuzhao.varFormatter.utils.XmlNodeObj;/*** 测试类** @author zhao*/
public class Test {public static void main(String[] args) {// 使用单例模式 获取到 HTML 格式化组件final Formatter formatter0 = VarFormatter.HTML.getFormatter(true);// 构建一个 body 和 html 标签final XmlNodeObj body = new XmlNodeObj("body");final XmlNodeObj xmlNodeObj = new XmlNodeObj("html", body);// 设置 html 标签的 lang 属性 xmlNodeObj.setAttr("lang", "zh");// 设置body标签内部的标签body.put("p", "这里是一些段落文本");// 在body标签内部添加一个div标签final XmlNodeObj div = new XmlNodeObj("div");// 设置 div 标签的属性 这里是设置的字体颜色div.setAttr("style", "color:#0f0");// 设置 div 标签内部的文本div.put("div", "这里是一些 div 中的段落文本");// 把 div 标签提供给 bodybody.put(div);// 直接打印出 HTML 格式的文本System.out.println(formatter0.format(xmlNodeObj));}
}

下面是格式化之后的结果


<html lang="zh">
<body><p>这里是一些段落文本</p>
<div style="color:#0f0"><div>这里是一些 div 中的段落文本</div>
</div>
</body>
</html>

各类格式化组件的使用

处理 json 类型的格式化组件,还有其它的型号,xml 格式化组件,html 格式化组件以及其它组件,都具有相同的使用方法,下面就是使用方法的演示实例。

xml 格式化组件演示实例

处理 xml 类型的格式化组件,它能够将任意的对象使用标签的方式转换成为一个 xml 格式的文本,xml 类型是具有根节点的,如果您格式化的是一个Map类型的对象,是支持指定根节点名字的,要指定根节点可以在 format 函数中指定
name 参数!

import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;import java.util.ArrayList;
import java.util.HashMap;/*** 测试类** @author zhao*/
public class Test {public static void main(String[] args) {// 使用单例模式 获取到 XML 格式化组件final Formatter formatter0 = VarFormatter.XML.getFormatter(true);// 将对象进行格式化操作 获取到对象的 xml 结构System.out.println(formatter0.format(new TestObj()));}// 准备了一个复杂的类static class TestObj {String name = "zhao";int age = 1024;HashMap<String, Object> data = new HashMap<>();TestObj2 testObj2 = new TestObj2();{data.put("k", 123123);data.put("k1", "123123");}public static class TestObj2 {String name = "zhao123";ArrayList<Integer> arrayList = new ArrayList<>();{arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);}}}
}

下面是处理之后的 xml 字符串


<TestObj><data><k1>123123</k1><k>123123</k></data><name>zhao</name><age>1024</age><testObj2><name>zhao123</name><arrayList><arrayList>1</arrayList><arrayList>2</arrayList><arrayList>3</arrayList><arrayList>4</arrayList></arrayList></testObj2>
</TestObj>
html 格式化组件演示实例

此组件是 HTML 格式化组件,是 xml 格式化组件的子类,它可以在实现 xml/html 格式转换的前提下,还保证其中字段的顺序,这对于html来说是很重要的,如果html 中的标签顺序不一致,则页面会错乱!

import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;import java.util.ArrayList;
import java.util.HashMap;/*** 测试类** @author zhao*/
public class Test {public static void main(String[] args) {// 使用单例模式 获取到 HTML 格式化组件final Formatter formatter0 = VarFormatter.HTML.getFormatter(true);// 将对象进行格式化操作 获取到对象的 HTML 结构System.out.println(formatter0.format(new TestObj()));}// 准备了一个复杂的类static class TestObj {String name = "zhao";int age = 1024;HashMap<String, Object> data = new HashMap<>();TestObj2 testObj2 = new TestObj2();{data.put("k", 123123);data.put("k1", "123123");}public static class TestObj2 {String name = "zhao123";ArrayList<Integer> arrayList = new ArrayList<>();{arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);}}}
}

下面是处理之后的字符串


<TestObj><name>zhao</name><age>1024</age><data><k1>123123</k1><k>123123</k></data><testObj2><name>zhao123</name><arrayList><arrayList>1</arrayList><arrayList>2</arrayList><arrayList>3</arrayList><arrayList>4</arrayList></arrayList></testObj2>
</TestObj>

更新记录

2024-03-01

初次发布 1.0.0 版本!

  • 支持 json xml html 格式化!
  • 提供了 DataObj 和 XmlNodeObj 类,能够用于进行转换。
  • 提供了针对类结构的解析模块,能够将任意的类结构转换为 json xml html 格式!

相关文章:

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术 开源技术栏 对象/变量格式化工具库&#xff0c;其支持将一个对象进行按照 JSON XML HTML 等格式进行转换&#xff0c;并获取到结果字符串&#xff01; 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…...

基于PHP的在线英语学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的在线英语学习平台 一 介绍 此在线英语学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为学生&#xff0c;教师和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/…...

基于微信小程序电影院订票选座系统 (后台JSP+JDBC+Mysql)答辩常规问题和如何回答(答辩指导)

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…...

C++知识点总结(22):模拟算法真题 ★★★☆☆《安全警报》

安全警报 1. 审题 题目描述 Z市最大的金融公司&#xff1a;太平洋金融遭到了入侵&#xff0c;一名黑客潜入到了公司中&#xff0c;公司紧急启动安保程序&#xff0c;将大楼封锁&#xff0c;并安排作为安全主管的你对楼层进行搜查。所以你准备写一个程序&#xff0c;输入搜查楼…...

蓝桥杯练习系统(算法训练)ALGO-993 RP大冒险

资源限制 内存限制&#xff1a;64.0MB C/C时间限制&#xff1a;200ms Java时间限制&#xff1a;600ms Python时间限制&#xff1a;1.0s 问题描述 请尽情使用各种各样的函数来测试你的RP吧~~~ 输入格式 一个数N表示测点编号。 输出格式 一个0~9的数。 样例输入 0 样…...

Unity的相机跟随和第三人称视角

Unity相机跟随和第三人称视角 介绍镜头视角跟随人物方向进行旋转的镜头视角固定球和人的镜头视角 思路跟随人物方向进行旋转的镜头视角固定球和人的镜头视角 镜头旋转代码人物移动的参考代码注意 介绍 最近足球项目的镜头在做改动&#xff0c;观察了一下实况足球的视角&#x…...

哪个超声波清洗机品牌值得入手?销量榜品牌值得选购!

在科技日益发展的今天&#xff0c;超声波清洗技术以其高效、便捷和深度清洁的特点&#xff0c;已经深入到生活的诸多领域&#xff0c;从精密仪器到珠宝首饰&#xff0c;从眼镜框到假牙&#xff0c;甚至是厨房用品的日常护理&#xff0c;都能见到超声波清洗机的身影。面对市场上…...

Stwo:基于Circle STARK和M31的下一代STARK证明系统

1. 引言 StarkWare团队和Polygon Labs团队&#xff0c;历时数月&#xff0c;构造了基于Mersenne素数域M31的Circle STARK协议&#xff0c;通过使用M31 over a circle&#xff0c;可基于任意有限域构造高效STARKs&#xff0c;具体见2024年2月19日论文《Circle STARKs》。 基于…...

笔记本以太网集线器Hub充电可能导致网络异常(貌似是我把服务器网关写错了)

文章目录 笔记本以太网集线器&#xff08;Hub&#xff09;充电导致网络异常概述原理分析电源与信号干扰设备热度设备兼容性问题 解决方案升级固件提高设备散热效率选择兼容性好的设备 总结 今天用笔记本以太网直连服务器&#xff0c;一开始能连通&#xff0c;结果以太网hub插上…...

npm ERR! code ETIMEDOUT

在新建vue项目的时候报错 npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/vue%2fcli failed, reason: connect ETIMEDOUT 104.16.2.35:443 npm ERR! network This is a problem relate…...

动态规划(算法竞赛、蓝桥杯)--分组背包DP

1、B站视频链接&#xff1a;E16 背包DP 分组背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int v[N][N],w[N][N],s[N]; // v[i,j]:第i组第j个物品的体积 s[i]:第i组物品的个数 int f[N][N]; // f[i,j]:前i组物品&#xff0c;能放…...

太阳能供电井盖-物联网智能井盖监测系统-旭华智能

在这个日新月异的科技时代&#xff0c;城市的每一个角落都在悄然发生变化。而在这场城市升级的浪潮中&#xff0c;智能井盖以其前瞻性的科技应用和卓越的安全性能&#xff0c;正悄然崭露头角&#xff0c;变身马路上的智能“眼睛”&#xff0c;守护城市安全。 传统的井盖监测系统…...

贪心 Leetcode 455 分发饼干

分发饼干 Leetcode 455 学习记录自代码随想录 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1…...

策略开发:EMA如何计算

EMA的计算原理 EMA 是MA&#xff08;平滑移动平均线&#xff09;的另一种形式。全名“加权指数移动平均线”。 2/13就是12日移动平均线的平滑因子&#xff0c;他的意思是指&#xff1a;给予新价格 2/13的权重&#xff0c;给予过去的EMA 11/13的权重。 在计算的时候第一天的M…...

学习Android的第二十天

目录 Android Toast 吐司 常量 常用方法 例子 Android Notification 状态栏通知 Notification 的基本布局 扩展布局 Notification ( 状态栏通知 ) 相关的方法 例子&#xff1a; 参考文档 Android AlertDialog 弹出框 Android Dialog 继承图谱 AlertDialog 几种常…...

Linux技巧|centos7|重新认识和学习egrep和grep命令

前言&#xff1a; 相信提高文本检索工具&#xff0c;大家脑海里肯定有很多工具会自动跳出来&#xff0c;比如&#xff0c;grep&#xff0c;egrep&#xff0c;sed&#xff0c;cat&#xff0c;more&#xff0c;less&#xff0c;cut&#xff0c;awk&#xff0c;vim&#xff0c;vi…...

css实现背景渐变叠加

线性渐变效果图: .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#fff 30%),linear-gradient(to right,pink,skyblue);}径像渐变效果图&#xff1a; .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#…...

Unity(第二十四部)UI

在游戏开发中&#xff0c;用户界面&#xff08;UI&#xff09;是至关重要的一部分。它负责与玩家进行交互&#xff0c;提供信息&#xff0c;并增强游戏的整体体验。Unity 提供了强大的工具和功能来创建和管理 UI。 ui的底层就是画布&#xff0c;创建画布的时候会同时创建一个事…...

VSCode通过SSH连接Docker环境进行开发

文章目录 VSCode 插件Docker 镜像构建镜像部署环境 VSCode 连接本地Docker容器VSCode SSH连接Docker容器VSCode 打开容器内目录文件 VSCode 插件 Remote - SSH Docker 镜像 https://hub.docker.com/_/golang # Golang 镜像 docker pull golang:1.22构建镜像 Dockerfile F…...

【QT】QTableView或QTableWidget 搭配QLineEdit实现数据的搜索显示

在 Qt 中&#xff0c;QTableView 和 QTableWidget 都可以用来实现数据的搜索和显示&#xff0c;但它们的适用场景和实现方式有所不同&#xff1a; QTableView 适用场景&#xff1a;QTableView 适用于更复杂的场景&#xff0c;尤其是当需要处理大量数据或需要高度定制化的表格时…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...