import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
public class JsonStringParseTest {
public static void main(String[] args) {
String jsonStr = "{\"name\":\"zhangsan\",\"arr\":[{\"price\":50,\"num\":5,\"str\":\"'\"},56],\"person\":{\"name\":\"lisi..\",\"age\":20}}";
String parseStr = parseJsonString(jsonStr);
System.out.println(parseStr);
}
private static String parseJsonString(String str) {
JSONArray jsonArr = isJsonArray(str);
if (jsonArr != null) {
ArrayList<Object> parseJsonArr = parseJsonArr(jsonArr);
str = JSON.toJSONString(parseJsonArr);
} else {
if (!str.contains(":")) {
str = replaceSpecicalCharacter(str, "");
//str = StringEscapeUtils.escapeHtml4(str);
} else {
@SuppressWarnings("unchecked")
Map<String, Object> map = JSON.parseObject(str, Map.class);
HashMap<String,Object> parseJsonObject = parseJsonObject(map);
str = JSON.toJSONString(parseJsonObject);
}
}
return str;
}
@SuppressWarnings("unchecked")
private static HashMap<String,Object> parseJsonObject(Map<String, Object> map) {
HashMap<String,Object> hashMap = new HashMap<String, Object>();
for (String key : map.keySet()) {
Object val = map.get(key);
if (map.get(key) instanceof String) {
hashMap.put(key, replaceSpecicalCharacter(val.toString(), key.toString()));
}else if(val instanceof JSONArray) {
ArrayList<Object> parseJsonArr = parseJsonArr((JSONArray) val);
hashMap.put(key, parseJsonArr);
}else if(val instanceof Map) {
HashMap<String,Object> parseJsonObject = parseJsonObject((Map<String, Object>) val);
hashMap.put(key, parseJsonObject);
}else {
hashMap.put(key, val);
}
}
return hashMap;
}
@SuppressWarnings("unchecked")
private static ArrayList<Object> parseJsonArr(JSONArray jsonArr) {
ArrayList<Object> arrayList = new ArrayList<Object>();
for (Object obj : jsonArr) {
if (obj instanceof String) {
arrayList.add(replaceSpecicalCharacter((String) obj, ""));
} else if(obj instanceof JSONArray){
ArrayList<Object> parseJsonArr = parseJsonArr((JSONArray) obj);
arrayList.add(parseJsonArr);
}else if(obj instanceof Map){
HashMap<String,Object> parseJsonObject = parseJsonObject((Map<String, Object>) obj);
arrayList.add(parseJsonObject);
}else {
arrayList.add(obj);
}
}
return arrayList;
}
private static JSONArray isJsonArray(String str) {
if (StringUtils.isEmpty(str)) {
return null;
}
try {
JSONArray jsonArr = JSONArray.parseArray(str);
return jsonArr;
} catch (Exception e) {
return null;
}
}
private static Map<String, Object> isJsonMap(String str) {
if (StringUtils.isEmpty(str)) {
return null;
}
try {
@SuppressWarnings("unchecked")
Map<String, Object> map = JSON.parseObject(str, Map.class);
return map;
} catch (Exception e) {
return null;
}
}
private static String replaceSpecicalCharacter(String target, String name) {
if ("pageNumber".equals(name) || "pageSize".equals(name)) {
String regEx = "[^0-9]";
Pattern compile = Pattern.compile(regEx);
Matcher matcher = compile.matcher(target);
return matcher.replaceAll("").trim();
} else if ("sortOrder".equals(name)) {
if (!"ASC".equals(target.toUpperCase()) || !"DESC".equals(target.toUpperCase())) {
return "ASC";
}
} else if ("sortName".equals(name)) {
String regEx = "[\\s\\=\\-]";
Pattern compile = Pattern.compile(regEx);
Matcher matcher = compile.matcher(target);
return matcher.replaceAll("").trim();
} else {
if (target.contains("..")) {
target = target.replaceAll("\\.\\.", "。。");
}
if (target.contains("*")) {
target = target.replaceAll("\\*", "*");
}
if (target.contains("[")) {
target = target.replaceAll("\\[", "[");
}
if (target.contains("`")) {
target = target.replaceAll("`", "`");
}
if (target.contains("~")) {
target = target.replaceAll("~", "~");
}
if (target.contains("!")) {
target = target.replaceAll("!", "!");
}
if (target.contains("@")) {
target = target.replaceAll("@", "@");
}
if (target.contains("#")) {
target = target.replaceAll("#", "#");
}
if (target.contains("$")) {
target = target.replaceAll("\\$", "$");
}
if (target.contains("%")) {
target = target.replaceAll("%", "%");
}
if (target.contains("^")) {
target = target.replaceAll("\\^", "^");
}
if (target.contains("&")) {
target = target.replaceAll("&", "&");
}
if (target.contains("(")) {
target = target.replaceAll("\\(", "(");
}
if (target.contains(")")) {
target = target.replaceAll("\\)", ")");
}
if (target.contains("+")) {
target = target.replaceAll("\\+", "+");
}
if (target.contains("=")) {
target = target.replaceAll("=", "=");
}
if (target.contains("|")) {
target = target.replaceAll("\\|", "|");
}
if (target.contains("{")) {
target = target.replaceAll("\\{", "{");
}
if (target.contains("}")) {
target = target.replaceAll("\\}", "}");
}
// if(target.contains(":")) {
// target = target.replaceAll(":", ":");
// }
if (target.contains("'")) {
target = target.replaceAll("'", "'");
}
// if(target.contains(",")) {
// target = target.replaceAll(",", ",");
// }
if (target.contains(";")) {
target = target.replaceAll(";", ";");
}
if (target.contains("\\")) {
target = target.replaceAll("\\\\", "\");
}
if (target.contains("<")) {
target = target.replaceAll("<", "<");
}
if (target.contains(">")) {
target = target.replaceAll(">", ">");
}
if (target.contains("/")) {
target = target.replaceAll("/", "/");
}
if (target.contains("?")) {
target = target.replaceAll("\\?", "?");
}
}
return target;
}
}
解析json字符串,替换字符串里存在的特殊字符
最新推荐文章于 2023-01-06 17:42:51 发布