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包

浙公网安备 33010602011771号