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 适用于更复杂的场景,尤其是当需要处理大量数据或需要高度定制化的表格时…...
Edge-SR实战:如何用边缘信息提升图像超分辨率重构效果(附代码)
Edge-SR实战:如何用边缘信息提升图像超分辨率重构效果(附代码) 在数字图像处理领域,超分辨率重构技术一直是研究热点。传统方法往往面临高频细节丢失、边缘模糊等问题,而Edge-SR通过巧妙利用边缘信息,为这一…...
馈线自动化(FA)如何重塑现代配电网?核心价值与技术路径解析
1. 馈线自动化:配电网的"智能医生" 想象一下凌晨三点你家突然停电的场景。传统配电网下,抢修人员需要逐段排查故障点,可能几小时后才能恢复供电。而配备了馈线自动化(FA)的智能配电网,能在90秒内…...
GLiNER实战项目:构建智能文档处理系统的完整指南
GLiNER实战项目:构建智能文档处理系统的完整指南 【免费下载链接】GLiNER Generalist and Lightweight Model for Named Entity Recognition (Extract any entity types from texts) 项目地址: https://gitcode.com/gh_mirrors/gl/GLiNER GLiNER(…...
【SOTA级冷启动优化指南】:基于17个生产环境LLM服务案例,提炼出唯一被验证有效的4阶段渐进式Warmup范式
第一章:大模型工程化中的冷启动优化 2026奇点智能技术大会(https://ml-summit.org) 大模型在首次部署或低流量场景下常面临推理延迟高、显存初始化慢、缓存未预热等“冷启动”瓶颈,直接影响用户体验与服务SLA。冷启动不仅体现为首次请求的毫秒级延迟激增…...
告别网盘限速的终极方案:网盘直链下载助手完全指南
告别网盘限速的终极方案:网盘直链下载助手完全指南 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 你是否曾经被网盘的龟速下载折磨得失去耐心?明明拥有百兆宽带&#…...
构建AIGC内容工厂:DeOldify作为图像处理环节的自动化集成
构建AIGC内容工厂:DeOldify作为图像处理环节的自动化集成 你有没有想过,一个简单的文本描述,如何能像流水线一样,自动变成一段生动的彩色短视频?这听起来像是科幻电影里的场景,但现在,借助AIGC…...
DeEAR开源大模型教程:DeEAR模型权重导出、ONNX转换与C++推理部署指南
DeEAR开源大模型教程:DeEAR模型权重导出、ONNX转换与C推理部署指南 1. 项目概述 DeEAR(Deep Emotional Expressiveness Recognition)是一个基于wav2vec2的深度语音情感表达分析系统。这个开源项目能够准确识别语音中的情感特征,…...
VS Code官宣全新AI工具:VS Code Agents!
🎯 一句话总结 VSCode 1.115 带来了 Agents 专属独立应用,🚀 主角登场:VS Code Agents 独立应用 这是什么? 不再是 VSCode 里的一个侧边栏,而是一个完全独立的 companion app,专为 Agent 开发打…...
ATK XCOM串口调试助手:从硬件连接到高效调试的完整指南
1. ATK XCOM串口调试助手入门指南 第一次接触串口调试的朋友可能会觉得有点懵,其实这东西就像是我们和硬件设备之间的"翻译官"。ATK XCOM是正点原子推出的一款专业级串口调试工具,我用过不下十种同类软件,最后还是觉得它最顺手。它…...
【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)碳
插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件࿰…...
