任務:
把字符串
轉化為:
{"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
相關推薦
推薦中...