把字符串轉化爲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