把字符串转化为json
任务:
把字符串
{"name":"黄威","age":27,"address":"{\"district\":\"海淀区\",\"street\":\"回龙观西大街\",\"building\":\"通达园\"}","score":0}
转化为:
{"name":"黄威","age":27,"address":{"district":"海淀区","street":"回龙观西大街","building":"通达园"},"score":0}
代码:
/*** * 最大限度地当做json 字符串解析<br /> * 方案:"[...]" 转为[...],并且其中的\"-->"<br /> * "{...}" 转为{...},并且其中的\"-->"<br /> * @param jsonStr * @return */ public static String toJson(String jsonStr) { if (ValueWidget.isNullOrEmpty(jsonStr)) { return null; } if (ValueWidget.isHTMLWebPage(jsonStr)) { return jsonStr; } if (!jsonStr.trim().startsWith("{")) { return jsonStr; } JSONObject jsonObject = null; try { jsonObject = JSONObject.parseObject(jsonStr); } catch (Exception e) { e.printStackTrace(); return jsonStr; } ParseJsonInfo parseJsonInfo = toJsonObjectRecursive(jsonObject); if (parseJsonInfo.isHasString()) { return jsonObject.toJSONString(); } return jsonStr; } /** * 最大限度地当做json 字符串解析<br /> * 方案:"[...]" 转为[...],并且其中的\"-->"<br / * * @param jsonObject * @return */ public static ParseJsonInfo toJsonObjectRecursive(JSONObject jsonObject) { // JSONObject jsonObject=JSONObject.parseObject(jsonStr); Set<Map.Entry<String, Object>> set = jsonObject.entrySet(); // boolean hasString=false; ParseJsonInfo parseJsonInfo = new ParseJsonInfo(); for (Map.Entry<String, Object> entry : set) { // System.out.println("key :" + entry.getKey()); Object val = entry.getValue(); String key = entry.getKey(); // System.out.println("value :" + val); if (val instanceof String) { String valString = (String) val; valString = valString.trim(); if (valString.contains(":") && valString.contains("\"")) {//判断是否是json字符串,比如{"username":"whuang"} // hasString=true; if (valString.startsWith("[")) {//"[...]"--数组 JSONArray jsonArray = JSONObject.parseArray(valString); parseArray(parseJsonInfo, jsonArray); jsonObject.put(key, jsonArray); } else {//--对象 ParseJsonInfo parseJsonInfoTmp = toJsonObjectRecursive(JSONObject.parseObject(valString)); jsonObject.put(key, parseJsonInfoTmp.getJsonObject()); } parseJsonInfo.setHasString(true); } } else if (val instanceof JSONObject) { ParseJsonInfo parseJsonInfoTmp = toJsonObjectRecursive((JSONObject) val); if (parseJsonInfoTmp.isHasString()) { parseJsonInfo.setHasString(true); } } // System.out.println("value type :" +(val instanceof String)); // String val2=JSONHWUtil.unescapeJava((String)val); // System.out.println("val2 :" + val2); } parseJsonInfo.setJsonObject(jsonObject); return parseJsonInfo; } public static void parseArray(ParseJsonInfo parseJsonInfoParent, JSONArray jsonArray) { int size = jsonArray.size(); for (int i = 0; i < size; i++) { Object object = jsonArray.get(i); if (object instanceof JSONObject) { ParseJsonInfo parseJsonInfoTmp = toJsonObjectRecursive((JSONObject) object); if (parseJsonInfoTmp.isHasString()) { parseJsonInfoParent.setHasString(true); jsonArray.set(i, parseJsonInfoTmp.getJsonObject()); } } } }
依赖的库:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.6</version> </dependency>
完整代码 见附件中的com/io/hw/json/JSONHWUtil.java