package com.uas.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JSONUtil { static final String Unicode_Pattern = "(\\\\u(\\p{XDigit}{4}))"; public static String decodeUnicode(String jsonStr) { if (jsonStr != null) { // unicode格式的转化成汉字 Pattern pattern = Pattern.compile(Unicode_Pattern); Matcher matcher = pattern.matcher(jsonStr); char ch; while (matcher.find()) { ch = (char) Integer.parseInt(matcher.group(2), 16); jsonStr = jsonStr.replace(matcher.group(1), ch + ""); } } return jsonStr; } public static Map toMap(String jsonStr) { jsonStr = decodeUnicode(jsonStr); jsonStr = jsonStr.substring(jsonStr.indexOf("{") + 1, jsonStr.lastIndexOf("}")); String[] strs; if(jsonStr.indexOf("\",\"")>0) strs = jsonStr.split(",\""); else strs = jsonStr.split(","); //字段名前没有引号的jsonStr ,类似bom校验:{bo_version:"V1.0",bo_mothercode:"BS00012",bo_ispast:"否",} String field = null; String value = null; Map map = new HashMap(); for (String str : strs) { if (str.indexOf(":") > 0) { field = str.substring(0, str.indexOf(":")); if (field != null) { if (field.startsWith("\"")) { field = field.substring(1, field.length()); } if (field.endsWith("\"")) { field = field.substring(0, field.lastIndexOf("\"")); } } value = str.substring(str.indexOf(":") + 1); if (value != null) { if (value.startsWith("\"")) { value = value.substring(1, value.length()); } if (value.endsWith("\"")) { value = value.substring(0, value.lastIndexOf("\"")); } } map.put(field, value); } } return map; } public static List> toMapList(String jsonStr) { if (jsonStr != null) { if (jsonStr.startsWith("[")) { jsonStr = jsonStr.substring(1, jsonStr.length()); } if (jsonStr.endsWith("]")) { jsonStr = jsonStr.substring(0, jsonStr.lastIndexOf("]")); } List> list = new ArrayList>(); if (jsonStr.indexOf("},") > -1) { String[] js = jsonStr.split("},"); for (String j : js) { if (!j.endsWith("}")) j = j + "}"; list.add(toMap(j)); } } else if (jsonStr.indexOf("{") > -1 && jsonStr.indexOf("}") > -1) { list.add(toMap(jsonStr)); } return list; } return null; } }