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 对象
XmlNodeObj 是 DataObj 的子类,其具有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 数据格式化 技术 开源技术栏 对象/变量格式化工具库,其支持将一个对象进行按照 JSON XML HTML 等格式进行转换,并获取到结果字符串! 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…...
基于PHP的在线英语学习平台
有需要请加文章底部Q哦 可远程调试 基于PHP的在线英语学习平台 一 介绍 此在线英语学习平台基于原生PHP开发,数据库mysql。系统角色分为学生,教师和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/…...
基于微信小程序电影院订票选座系统 (后台JSP+JDBC+Mysql)答辩常规问题和如何回答(答辩指导)
博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程ÿ…...
C++知识点总结(22):模拟算法真题 ★★★☆☆《安全警报》
安全警报 1. 审题 题目描述 Z市最大的金融公司:太平洋金融遭到了入侵,一名黑客潜入到了公司中,公司紧急启动安保程序,将大楼封锁,并安排作为安全主管的你对楼层进行搜查。所以你准备写一个程序,输入搜查楼…...
蓝桥杯练习系统(算法训练)ALGO-993 RP大冒险
资源限制 内存限制:64.0MB C/C时间限制:200ms Java时间限制:600ms Python时间限制:1.0s 问题描述 请尽情使用各种各样的函数来测试你的RP吧~~~ 输入格式 一个数N表示测点编号。 输出格式 一个0~9的数。 样例输入 0 样…...
Unity的相机跟随和第三人称视角
Unity相机跟随和第三人称视角 介绍镜头视角跟随人物方向进行旋转的镜头视角固定球和人的镜头视角 思路跟随人物方向进行旋转的镜头视角固定球和人的镜头视角 镜头旋转代码人物移动的参考代码注意 介绍 最近足球项目的镜头在做改动,观察了一下实况足球的视角&#x…...
哪个超声波清洗机品牌值得入手?销量榜品牌值得选购!
在科技日益发展的今天,超声波清洗技术以其高效、便捷和深度清洁的特点,已经深入到生活的诸多领域,从精密仪器到珠宝首饰,从眼镜框到假牙,甚至是厨房用品的日常护理,都能见到超声波清洗机的身影。面对市场上…...
Stwo:基于Circle STARK和M31的下一代STARK证明系统
1. 引言 StarkWare团队和Polygon Labs团队,历时数月,构造了基于Mersenne素数域M31的Circle STARK协议,通过使用M31 over a circle,可基于任意有限域构造高效STARKs,具体见2024年2月19日论文《Circle STARKs》。 基于…...
笔记本以太网集线器Hub充电可能导致网络异常(貌似是我把服务器网关写错了)
文章目录 笔记本以太网集线器(Hub)充电导致网络异常概述原理分析电源与信号干扰设备热度设备兼容性问题 解决方案升级固件提高设备散热效率选择兼容性好的设备 总结 今天用笔记本以太网直连服务器,一开始能连通,结果以太网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站视频链接: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组物品,能放…...
太阳能供电井盖-物联网智能井盖监测系统-旭华智能
在这个日新月异的科技时代,城市的每一个角落都在悄然发生变化。而在这场城市升级的浪潮中,智能井盖以其前瞻性的科技应用和卓越的安全性能,正悄然崭露头角,变身马路上的智能“眼睛”,守护城市安全。 传统的井盖监测系统…...
贪心 Leetcode 455 分发饼干
分发饼干 Leetcode 455 学习记录自代码随想录 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸࿱…...
策略开发:EMA如何计算
EMA的计算原理 EMA 是MA(平滑移动平均线)的另一种形式。全名“加权指数移动平均线”。 2/13就是12日移动平均线的平滑因子,他的意思是指:给予新价格 2/13的权重,给予过去的EMA 11/13的权重。 在计算的时候第一天的M…...
学习Android的第二十天
目录 Android Toast 吐司 常量 常用方法 例子 Android Notification 状态栏通知 Notification 的基本布局 扩展布局 Notification ( 状态栏通知 ) 相关的方法 例子: 参考文档 Android AlertDialog 弹出框 Android Dialog 继承图谱 AlertDialog 几种常…...
Linux技巧|centos7|重新认识和学习egrep和grep命令
前言: 相信提高文本检索工具,大家脑海里肯定有很多工具会自动跳出来,比如,grep,egrep,sed,cat,more,less,cut,awk,vim,vi…...
css实现背景渐变叠加
线性渐变效果图: .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#fff 30%),linear-gradient(to right,pink,skyblue);}径像渐变效果图: .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#…...
Unity(第二十四部)UI
在游戏开发中,用户界面(UI)是至关重要的一部分。它负责与玩家进行交互,提供信息,并增强游戏的整体体验。Unity 提供了强大的工具和功能来创建和管理 UI。 ui的底层就是画布,创建画布的时候会同时创建一个事…...
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 中,QTableView 和 QTableWidget 都可以用来实现数据的搜索和显示,但它们的适用场景和实现方式有所不同: QTableView 适用场景:QTableView 适用于更复杂的场景,尤其是当需要处理大量数据或需要高度定制化的表格时…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
