比如要实现以下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": "预购量"
}
]
}
}
}
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf