把字符串转化为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