有这样一个实体类:

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文进行内部排序后再输出的更多相关文章

  1. 【json/regex】将嵌套对象生成的json文进行内部整形排序后再输出

    下载地址:https://files.cnblogs.com/files/xiandedanteng/jsonformat20191126-2.zip 注意:本文仅为draft1版本,还有待完善. 先 ...

  2. 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 ...

  3. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  4. 生成package.json和bower.json

    1.安装nodejs 2.安装bower工具   cmd:npm bower install 3.生成package.json  cmd:npm init 4.生成bower.json cmd:bow ...

  5. 基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目

    自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...

  6. Asp.NetCore1.1版本没了project.json,这样来生成跨平台包

    本章将要和大家分享的是Asp.NetCore1.1版本去掉了project.json后如何打包生成跨平台包, 为了更好跟进AspNetCore的发展,把之前用来做netcore开发的vs2015卸载后 ...

  7. js根据条件json生成随机json:randomjson

    前端开发中,在做前后端分离的时候,经常需要手写json数据,有3个问题特别揪心: 1,数据是写死的,不能按一定的条件随机生成长度不一,内容不一的数据 2,写数组的时候,如果有很多条,需要一条一条地写, ...

  8. 基于HTML5及WebGl下生成的json格式的工控SCADA风机叶轮旋转

    突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开.我用HT实现了我的想法,代码一百多行,这么少的代码 ...

  9. npm init 命令生成package.json文件

    通过npm init 命令可以生成一个package.json文件.这个文件是 整个项目的描述文件.通过这个文件可以清楚的知道项目的包依赖关系,版本,作者等信息.每个NPM包都有自己的package. ...

随机推荐

  1. p7.BTC-挖矿总结

    全节点: 1 一直在线 2 在本地硬盘上维护完全的区块链信息 3 在内存里维护UTXO集合,以便快速检验交易的正确性 4 监听比特币网络上的交易信息,验证每个交易的合法性 5 决定哪些交易会被打包到区 ...

  2. vmware虚拟机克隆后网卡修改

    在使用vmware虚拟机时,有时候需要通过一个虚拟机克隆出批量的虚拟机,在克隆后,会发现网卡信息发生了变化,以这里为例,源主机网卡名称为eth0.eth1,在克隆后变成了eth2.eth3,这时候,如 ...

  3. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

  4. HashMap简介以及hashCode写法的建议

    映射表Map Map也叫映射表或者字典,Map中存储的元素是一个键值对key-value,他们共同包装在Entry<K,V>对象中.我们能通过key直接获取value,就像查字典一样. J ...

  5. MySQL线程状态详解

    前言: 我们常用 show processlist 或 show full processlist 查看数据库连接状态,其中比较关注的是 State 列,此列表示该连接此刻所在的状态.那么你真的了解不 ...

  6. linux系统编程之信号(二)

    经过了漫长的间歇,对于c语言的学习也被中断了很久,现实确实有很多的无耐,计划中的事情总会被打乱,但不管怎样,学习的道路是不能休止的,所以经过了一断温习后现在继续学习C语言,话不多说,进入正题: 信号分 ...

  7. 微信小程序~App.js中登录

    (1)初始化项目中App.js登录代码 // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, u ...

  8. scala 中的集合类

    集合最重要的继承路线 —— Traversable -> Iterable -> Seq -> LinerSeq -> List Traversable 中的公有方法: 分类 ...

  9. 04 Spring的依赖注入

    依赖注入:Dependency Injection.它是 spring 框架核心 ioc 的具体实现. 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖 ...

  10. test20190818 NOIP2019 模拟赛

    0+0+20=20,不给大样例,小数据又水,还没有题解的垃圾题. A 题 问题描述: long long ago, Lxhgww 统治的国家里有 n 个城市,其中某一个城市是 capital (首都) ...