比如要实现以下json数据的封装
{
"name": "SO JSON在线",
"url": "https://www.sojson.com",
"address": {
"city": "北京",
"country": "中国"
},
"domain_list": [
{
"name": "ICP备案查询",
"url": "https://icp.sojson.com"
},
{
"name": "JSON在线解析",
"url": "https://www.sojson.com"
},
{
"name": "房贷计算器",
"url": "https://fang.sojson.com"
}
]
}
使用传统方式封装:
private static Object traditional() {
Map<String, Object> map1 = new LinkedHashMap<>();
Map<String, Object> map2 = new LinkedHashMap<>();
Map<String, Object> map3 = new LinkedHashMap<>();
Map<String, Object> map4 = new LinkedHashMap<>();
Map<String, Object> map5 = new LinkedHashMap<>();
List<Object> list1 = new ArrayList<>();
map1.put("name", "SO JSON在线");
map1.put("url", "https://www.sojson.com");
map2.put("city", "北京");
map2.put("country", "中国");
map1.put("address", map2);
map3.put("name", "ICP备案查询");
map3.put("url", "https://icp.sojson.com");
list1.add(map3);
map4.put("name", "JSON在线解析");
map4.put("url", "https://www.sojson.com");
list1.add(map4);
map5.put("name", "房贷计算器");
map5.put("url", "https://fang.sojson.com");
list1.add(map5);
map1.put("domain_list", list1);
return map1;
}
使用自定义工具封装:
private static Object elegantBuilder() {
return MyJson.map()
.pu("name", "SO JSON在线")
.pu("url", "https://www.sojson.com")
.pu("address", MyJson.map()
.pu("city", "北京")
.pu("country", "中国")
)
.pu("domain_list", MyJson.list()
.ad(MyJson.map()
.pu("name", "ICP备案查询")
.pu("url", "https://icp.sojson.com")
)
.ad(MyJson.map()
.pu("name", "JSON在线解析")
.pu("url", "https://www.sojson.com")
)
.ad(MyJson.map()
.pu("name", "房贷计算器")
.pu("url", "https://fang.sojson.com")
)
);
}
使用自定义工具后json结构更加直观
自定义MyMap
package com.wanger.utils.json;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: wanger
* @Date: 2023/9/27 14:47
* @Description: 自定义map,实现简化json构造
*/
public class MyMap extends HashMap<String, Object> {
private static final long serialVersionUID = 3149678103625048002L;
private MyMap() {
}
public static MyMap create() {
return new MyMap();
}
public MyMap pu(String key, Object data) {
super.put(key, data);
return this;
}
public Object[] toArr() {
MyList list = MyJson.list();
for (Map.Entry<String, Object> entry : this.entrySet()) list.ad(entry);
return list.toArr();
}
public Map<String, Object> toMap() {
return this;
}
}
自定义MyList
package com.wanger.utils.json;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: wanger
* @Date: 2023/9/27 14:49
* @Description: 自定义list,实现简化json构造
*/
public class MyList extends ArrayList<Object> {
private static final long serialVersionUID = -6352745866130164444L;
private MyList() {
}
public static MyList create() {
return new MyList();
}
public MyList ad(Object data) {
super.add(data);
return this;
}
public Object[] toArr() {
return super.toArray();
}
public List<Object> toList() {
return this;
}
}
静态创建map与list
package com.wanger.utils.json;
/**
* @Author: wanger
* @Date: 2023/9/28 9:30
* @Description: 创建自定义list或者map
*/
public class MyJson {
/**
* 静态创建自定义list实例
*
* @return 实例对象
*/
public static MyList list() {
return MyList.create();
}
/**
* 静态创建自定义map实例
*
* @return 实例对象
*/
public static MyMap map() {
return MyMap.create();
}
}
homeMapper是模拟数据查询操作
/**
* 描述,柱状图,饼图,列表等数据
*
* @return data
*/
@Override
public Object homePage() {
return MyMap.create()
.pu("userInfo", homeMapper.getUserInfo())
.pu("customerInformation", MyMap.create()
.pu("head", "客户信息")
.pu("list", homeMapper.getList())
)
.pu("indexes", homeMapper.getIndexes())
.pu("marketBar", MyMap.create()
.pu("title", "销售柱状图")
.pu("data", homeMapper.marketBar())
)
.pu("marketPie", MyMap.create()
.pu("title", "销售饼图")
.pu("data", homeMapper.marketPie())
);
}
封装出的json数据
{
"code": 200,
"msg": "查询成功",
"data": {
"userInfo": {
"userName": "wanger",
"role": "管理员",
"lastLoginTime": "2023/09/30 21:43"
},
"customerInformation": {
"head": "客户信息",
"list": [
{
"id": "b21eea43-4dce-405a-82d3-76016e4a73af",
"date": "2023/10/07 21:43",
"name": "王二",
"address": "山东曹县666号路"
},
{
"id": "8645dada-4a25-4fea-bcb3-13e03da6408f",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "阳关大道物业小区2304号"
},
{
"id": "72fd460e-f72c-4907-9902-48f3550a9049",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "山东曹县666号路"
},
{
"id": "0f0902e8-d3b5-4aff-a48b-f7f36a86e775",
"date": "2023/10/07 21:43",
"name": "王二",
"address": "阳关大道物业小区2304号"
},
{
"id": "21e67d35-52d4-4c5b-82ca-bcc8e2ff934e",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "山东曹县666号路"
},
{
"id": "6961c1d0-1a02-46cf-a1a8-f64073b2f01d",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "阳关大道物业小区2304号"
},
{
"id": "c2ae0dc2-bf65-435a-b6fb-4a2867bde10f",
"date": "2023/10/07 21:43",
"name": "王二",
"address": "山东曹县666号路"
},
{
"id": "d5d52fd7-33af-4afd-9896-44df3800579c",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "阳关大道物业小区2304号"
},
{
"id": "89ddda4e-ca4f-4afd-b5cf-778cdd822b76",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "山东曹县666号路"
},
{
"id": "1c6a08d6-fe88-4668-8fe4-139b2eef7b69",
"date": "2023/10/07 21:43",
"name": "王二",
"address": "阳关大道物业小区2304号"
},
{
"id": "37e36dda-782d-4d80-b625-1156831cd76d",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "山东曹县666号路"
},
{
"id": "472eb535-12bf-4fd1-a0e6-05ad61a1a930",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "阳关大道物业小区2304号"
},
{
"id": "60f9faa2-2fd2-474e-8e25-e0c26d08f00a",
"date": "2023/10/07 21:43",
"name": "王二",
"address": "山东曹县666号路"
},
{
"id": "63604b05-698f-40ff-8096-7d3d1529205f",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "阳关大道物业小区2304号"
},
{
"id": "114c6886-1f20-4e4e-bb9a-458c787e8e04",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "山东曹县666号路"
},
{
"id": "e3e6dd85-364e-4f15-8bd4-c3f143656dca",
"date": "2023/10/07 21:43",
"name": "王二",
"address": "阳关大道物业小区2304号"
},
{
"id": "f1abf464-4577-4848-bb4d-538d9fcad0e4",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "山东曹县666号路"
},
{
"id": "fb1882eb-4eb3-4299-86ce-40c5e179a05e",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "阳关大道物业小区2304号"
},
{
"id": "80b7a392-4e4d-45c9-b5d2-8ee3824279a6",
"date": "2023/10/07 21:43",
"name": "王二",
"address": "山东曹县666号路"
},
{
"id": "e4f0c6c7-07ec-4a08-88ba-7d4e251e509f",
"date": "2023/10/07 21:43",
"name": "张三",
"address": "阳关大道物业小区2304号"
}
]
},
"indexes": [
{
"color": "#2ec7c9",
"value": 1200,
"icon": "success",
"name": "今日支付订单"
},
{
"color": "#ffb980",
"value": 120,
"icon": "star-on",
"name": "今日收藏订单"
},
{
"color": "#5ab1ef",
"value": 12,
"icon": "s-goods",
"name": "今日取消订单"
},
{
"color": "#2ec7c9",
"value": 1100,
"icon": "success",
"name": "今日退款订单"
},
{
"color": "#ffb980",
"value": 100,
"icon": "star-on",
"name": "本月支付订单"
},
{
"color": "#5ab1ef",
"value": 1,
"icon": "s-goods",
"name": "本月退款订单"
}
],
"marketBar": {
"title": "销售柱状图",
"data": {
"legend": {
"data": [
"今日销量",
"昨日销量"
]
},
"xAxis": {
"data": [
"华为",
"vivo",
"oppo",
"ipone",
"小米",
"三星"
]
},
"series": [
{
"name": "今日销量",
"type": "bar",
"data": [
5,
20,
36,
10,
10,
20
]
},
{
"name": "昨日销量",
"type": "bar",
"data": [
10,
18,
34,
8,
12,
21
]
}
]
}
},
"marketPie": {
"title": "销售饼图",
"data": [
{
"value": 1049,
"name": "成交订单量"
},
{
"value": 735,
"name": "退款订单量"
},
{
"value": 580,
"name": "浏览量"
},
{
"value": 484,
"name": "加购量"
},
{
"value": 300,
"name": "预购量"
}
]
}
}
}
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数