【json/regex】将简单对象生成的json文进行内部排序后再输出
有这样一个实体类:
package com.hy; public class Emp { private int id; private int age; private String name; private boolean isMale; private String phone; public Emp() { } public Emp(int id,int age,String name,boolean isMale,String phone) { this.id=id; this.age=age; this.name=name; this.isMale=isMale; this.phone=phone; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isMale() { return isMale; } public void setMale(boolean isMale) { this.isMale = isMale; } }
如果有这样一个实例:
Emp felix=new Emp(6,47,"费力克死",false,"18000000001");
那用这个实例得到json文是:
{"age":47,"id":6,"male":false,"name":"费力克死","phone":"18000000001"}
这个结果没有以key排序且是横向扩展的,如果属性众多可读性就不是那么理想。
因此,下面这个类就登场了:
package com.hy; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sf.json.JSONObject; /** * 简单Json排序类 * @author 逆火 * * 2019年11月24日 上午11:57:39 */ public class SimpleJsonSorter { private List<KeyValue> kvList; public SimpleJsonSorter(String jsonStr){ kvList=new ArrayList<KeyValue>(); java.util.regex.Pattern pattern=Pattern.compile("(\"([_a-zA-Z]+[_a-zA-Z0-9]*)\")[:]([^,}]+)"); Matcher matcher=pattern.matcher(jsonStr); while(matcher.find()) { //System.out.println( matcher.group(1)+ ":"+matcher.group(3)); kvList.add(new KeyValue(matcher.group(1),matcher.group(3))); } } public String getFormattedJson() { Collections.sort(kvList); StringBuilder sb=new StringBuilder(); sb.append("{\n"); for(KeyValue kv:kvList) { sb.append("\t"+kv.key+":"+kv.value+",\n"); } sb.append("}"); return sb.toString(); } protected final class KeyValue implements Comparable<KeyValue>{ private String key; private String value; public KeyValue(String key,String value) { this.key=key; this.value=value; } public int compareTo(KeyValue other) { return this.key.compareTo(other.key); } } public static void main(String[] args) { Emp felix=new Emp(6,47,"费力克死",false,"18000000001"); JSONObject deptJson = JSONObject.fromObject(felix); String jsonString=deptJson.toString(); System.out.println(jsonString); SimpleJsonSorter sjs=new SimpleJsonSorter(jsonString); System.out.println(sjs.getFormattedJson()); } }
经过它整形后,json文会是:
{ "age":47, "id":6, "male":false, "name":"费力克死", "phone":"18000000001", }
这样,它内部key以字母序排列,方便查找,又是竖向扩展的,用于写文档省力多了。
--END-- 2019年11月24日12:27:34
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)