解析json字符串,替换字符串里存在的特殊字符


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;
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiabao998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值