【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
【json/regex】将简单对象生成的json文进行内部排序后再输出的更多相关文章
- 【json/regex】将嵌套对象生成的json文进行内部整形排序后再输出
下载地址:https://files.cnblogs.com/files/xiandedanteng/jsonformat20191126-2.zip 注意:本文仅为draft1版本,还有待完善. 先 ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- iOS开发之JSON格式数据的生成与解析
本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...
- 生成package.json和bower.json
1.安装nodejs 2.安装bower工具 cmd:npm bower install 3.生成package.json cmd:npm init 4.生成bower.json cmd:bow ...
- 基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目
自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...
- Asp.NetCore1.1版本没了project.json,这样来生成跨平台包
本章将要和大家分享的是Asp.NetCore1.1版本去掉了project.json后如何打包生成跨平台包, 为了更好跟进AspNetCore的发展,把之前用来做netcore开发的vs2015卸载后 ...
- js根据条件json生成随机json:randomjson
前端开发中,在做前后端分离的时候,经常需要手写json数据,有3个问题特别揪心: 1,数据是写死的,不能按一定的条件随机生成长度不一,内容不一的数据 2,写数组的时候,如果有很多条,需要一条一条地写, ...
- 基于HTML5及WebGl下生成的json格式的工控SCADA风机叶轮旋转
突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开.我用HT实现了我的想法,代码一百多行,这么少的代码 ...
- npm init 命令生成package.json文件
通过npm init 命令可以生成一个package.json文件.这个文件是 整个项目的描述文件.通过这个文件可以清楚的知道项目的包依赖关系,版本,作者等信息.每个NPM包都有自己的package. ...
随机推荐
- go工程组织规范
go编码以workspace形式管理,一个workspace包含所有的Go编码,包含多个版本控制仓库(例如使用git管理的多个仓库).每个仓库包含多个包package,每个package是一个单独的路 ...
- altium designer(AD13)隐藏敷铜的方法
覆铜,就是将PCB上闲置的空间作为基准面,然后用固体铜填充,这些铜区又称为灌铜.敷铜的意义在于,减小地线阻抗,提高抗干扰能力;降低压降,提高电源效率;还有,与地线相连,减小环路面积. 如果拿到别人的P ...
- zabbix Server 4.0监控Flume关键参数
zabbix Server 4.0监控Flume关键参数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Flume本身提供了http, ganglia的监控服务.当然我们也可以使用 ...
- UniChat-软件工程小组-第一次作业-选题
软件工程小组项目文档 小组成员:赵有为.张天善.宋春雨.郭凯璐.孙楠.冯韵瑶 Uni-Chat项目文档 需求分析Need 日常生活中我们在使用Ubuntu等系统时都会因为QQ等聊天工具对基于Lin ...
- react native jpush
原文链接:https://blog.csdn.net/qq_38719039/article/details/80684144 1 npm install jpush-react-native --s ...
- React使用axios请求并渲染数据
一.什么是 axios Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中 二.axios 的安装 1.在项目根目录终端引入: npm isntall -- ...
- Spark-2.3.2 HBase BulkLoad
在大量数据需要写入HBase时,通常有Put方式和BulkLoad两种方式. Put不做解释. BulkLoader方式的优势在于: 1.不会触发WAL预写日志,当表还没有数据时进行数据导入不会产生F ...
- service worker(二)之主页面与service worker通信
实现一个主页面发送消息,worker搜到信息向所有的页面派发消息(当前页面除外) msg.html <!DOCTYPE html> <html lang="en" ...
- windows 使用SVN命令
在不用安装TortoiseSVN客户端的情况,大家可以再http://subversion.apache.org/packages.html#windows 找到windows下的svn客户端工具.选 ...
- c语言中,如果将无符号数转换为有符号数
在使用ti的adc芯片ads1259时,芯片是24为数据格式保存的,其中最高位是符号位,因此可以理解为是有符号数据,但是在嵌入式系统中,没有直接24位的变量,因此使用32的无符号先保存24位的数据. ...