复杂JSON结构创建语法
最近在开发某个功能的过程中,需要调用一个第三方的接口。我查看某个接文档中请求参数示例时候,有点hold不住了,这这么也太复杂了。
震惊之余还是得继续工作,然后我刚写了几行代码,就已经重建了三个JSONobject和一个JSONarray对象,属实有点复杂过头了。
此时灵光乍现,突然想起之前学到的在map初始化赋值的技能,可以在创建map实现类对象的时候直接赋值。具体实现如下:
HashMap<String, Integer> map = new HashMap<String,Integer>() {{
put("322", 1322);
put("3242", 1232);
put("32422", 1264);
}};
这里虽然省不了几行代码,但是能少很多对象名的出现,而且这里会出现缩进,更便于可读性(这一点纯属个人看法,问了粉丝,有说原来的可读性更好)。
其实Java很多集合类都可以这么写,下面展示一个比较复杂的JSONObject初始化赋值和常用语法的对比。
- 常用的语法
JSONObject funtester = new JSONObject();
funtester.put("class", 23);
ArrayList<Integer> tid = new ArrayList<>();
ArrayList<Integer> sid = new ArrayList<>();
tid.add(32312);
tid.add(12312);
funtester.put("teacher", tid);
sid.add(32312);
sid.add(12312);
funtester.put("student", sid);
JSONObject data = new JSONObject();
data.put("max", 123);
data.put("avg", 100);
ArrayList<Integer> scores = new ArrayList<>();
scores.add(123);
scores.add(77);
data.put("scores", scores);
funtester.put("data", data);
- 初始化赋值
JSONObject funtester = new JSONObject() {{
put("class", 23);
put("teacher", new ArrayList<Integer>() {{
add(32312)
add(12312)
}});
put("students", new ArrayList<Integer>() {{
add(123)
add(125)
}});
put("data", new JSONObject() {{
put("max", 123);
put("avg", 100);
put("scores", new ArrayList<Integer>() {{
add(123)
add(77)
}})
}});
}};
所以我的封装方法变成了这个结构:
public void sendRtf(String title, String content, String url, String uid) {
send(new JSONObject() {{
put("msg_type", "post");
put("content", new JSONObject() {{
put("post", new JSONObject() {{
put("zh_cn", new JSONObject() {{
put("title", title);
put("content", new JSONArray() {{
add(new JSONArray() {{
add(new JSONObject() {{
put("tag", "text");
put("text", "content");
}});
if (StringUtils.isNotBlank(url)) {
add(new JSONObject() {{
put("tag", "a");
put("text", "点击查看详情");
put("href", url);
}});
}
if (StringUtils.isNotBlank(uid)) {
add(new JSONObject() {{
put("tag", "at");
put("user_id", uid);
}});
}
}});
}});
}});
}});
}});
}});
}
图形展示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2019-11-19 探索性测试为何如此重要?
2019-11-19 人生苦短?试试Groovy进行单元测试