zoukankan      html  css  js  c++  java
  • lombok @Data @ToString 调用tostring转化后的字符串转json字符串

      如果我们使用lombok时,打印传入参数对象,这时输出格式是下面这种 

    public static class Square  {  
        private final int width, height;  
          
        public Square(int width, int height) {  
          this.width = width;  
          this.height = height;  
        }  
          
        @Override
    public String toString() { return "Square(width=" + this.width + ", height=" + this.height + ")"; } }
    //Square(width=10, height=20)
    
    

    如果我们需要转回成对象 ,这个时候就转不了,故简单写了一个转化成json的

    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    import java.util.List;
    
    /**
     * @description:
     * @author: ZhongMing.Liu
     * @create: 2020/5/22 16:34
     */
    public class DataToObjectTest {
    
        /**
         * 获取key
         *
         * @param str
         * @return
         */
        private static String before(String str) {
            int i = str.indexOf("=");
            int j = i;
            if (i == -1) {
                return null;
            }
            while (true) {
                String tempStr = null;
                if (j - 1 >= 0) {
                    tempStr = str.substring(j - 1, j);
                } else {
                    break;
                }
                if ("()[],".indexOf(tempStr) > -1 || " ".equals(tempStr)) {
                    break;
                }
                j--;
            }
            return str.substring(j, i);
        }
    
        /**
         * 获取value
         *
         * @param str
         * @return
         */
        private static String after(String str) {
            int i = str.indexOf("=");
            int j = i + 1;
            int length = str.length();
            if (i == -1 || j >= length) {
                return null;
            }
            while (true) {
                String tempStr1 = null;
                if (j + 1 < length) {
                    tempStr1 = str.substring(j, j + 1);
                } else
                    break;
                if (",".equals(tempStr1) || ")".equals(tempStr1)) {
                    String tempStr2 = null;
                    if (j + 2 < length) {
                        tempStr2 = str.substring(j + 1, j + 2);
                        if (" ".equals(tempStr2) || "]".equals(tempStr2) || ",".equals(tempStr2))
                            break;
                    } else
                        break;
                }
                j++;
            }
            return str.substring(i + 1, j);
        }
    
        /**
         * lombok @Data默认toString反序列化成对象
         *
         * @param str
         * @param cls
         * @param <T>
         * @return
         */
        public <T> T strToObject(String str, Class<T> cls) {
            return strToJson(str).toJavaObject(cls);
        }
    
        /**
         * 数组l
         * lombok @Data默认toString反序列化成对象
         *
         * @param str
         * @param cls
         * @param <T>
         * @return
         */
        public <T> List<T> strToList(String str, String objStr, Class<T> cls) {
            return strToJsonArray(str, objStr).toJavaList(cls);
        }
    
        /**
         * 数组
         * lombok @Data默认toString反序列化成JSON
         *
         * @param str
         * @param obj
         * @return
         */
        public static JSONArray strToJsonArray(String str, String obj) {
            JSONArray array = new JSONArray();
            if ("[".equals(str.substring(0, 1)) && "]".equals(str.substring(str.length() - 1))) {
                while (true) {
                    String t1 = str.replaceFirst(obj, "");
                    if (t1.indexOf(obj) != -1) {
                        String temp = t1.substring(0, t1.indexOf(obj));
                        str = t1.substring(t1.indexOf(obj));
                        array.add(strToJson(temp));
                    } else {
                        array.add(strToJson(t1));
                        break;
                    }
                }
            } else {
                array.add(strToJson(str));
            }
            return array;
        }
    
        /**
         * lombok @Data默认toString反序列化成JSON
         *
         * @param str
         * @return
         */
        public static JSONObject strToJson(String str) {
            JSONObject result = new JSONObject();
            while (true) {
                String before = before(str);
                String after = after(str);
                if (before == null) {
                    break;
                }
                if ("null".equals(after)) {
                    result.put(before, null);
                } else {
                    result.put(before, after);
                }
                str = str.replace(before + "=" + after, "");
            }
            return result;
        }
    
        //测试
        public static void main(String[] args) {
            String str = "Square(width=10, height=20)";
            System.out.println(strToJson(str));
            System.out.println(strToJsonArray(str, "Square"));
        }
    
        //结果
        //{"width":"10","height":"20"}
        //[{"width":"10","height":"20"}]
    }

    //ps:用到fastjson包

  • 相关阅读:
    npm修改为淘宝源
    将蓝牙rssi(信号强度)转换成距离
    goland 可用注册码(license)
    用爬虫实现验证码识别并模拟登陆和cookie操作、代理操作、线程池
    爬虫概述
    初识ES()
    ansible中的playbook(剧本)
    ansible中File模块、Fetch模块、Yum模块、Pip模块、Service模块、Cron模块、User模块、Group模块
    ansible的安装与介绍、host-pattern格式、ansible的command模块、ansible的shell模块、ansible的script模块、ansible的copy模块
    Flask中的before_request装饰器和after_request装饰器以及WTForms组件
  • 原文地址:https://www.cnblogs.com/yjhkhnuje/p/12712913.html
Copyright © 2011-2022 走看看