• 【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("{
    ");
            
            for(KeyValue kv:kvList) {
                sb.append("	"+kv.key+":"+kv.value+",
    ");
            }
            
            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

  • 相关阅读:
    Swagger配置和使用
    请求SpringMVC接口如何传参数
    ssm搭建配置文件
    永久关闭windows10更新
    VSCode搭建java开发环境
    idea全局设置
    mybatis-plus查询指定字段
    mybayis-plus条件构造器
    Java日期时间操作的一些方法
    C#编写聊天软件客户端
  • 原文地址:https://www.cnblogs.com/heyang78/p/11921922.html
Copyright © 2020-2023  润新知