一般获取到的json格式的字符串,都是用冒号:分割的,用各类工具类都可以直接转为实体类,但是有不规范的json形式的字符串,则需要进行转换为正确的json格式,才可以用工具类进行转为实体类。
获取到的参数是这样的,没办法直接转为实体类,会报错
[{user={name=zhangsan, age=4}, {name=lisi, age=5}}]
代码如下:
import org.apache.commons.lang3.StringUtils;
import cn.hutool.json.JSONUtil;
import cn.hutool.json.JSONObject;
public static void main(String[] args) {
// 拿到list Map形式的字符串
String param = "[{user={name=zhangsan, age=4}, type=user}, {user={name=lisi, age=5}, type=user}]";
if (StringUtils.isNotBlank(param.replace("[]",""))) {
// 切割,拿到每一个map
String[] split = param.substring(1, param.length() - 1).split("}, \\{");
for (String user : split) {
user = verify(user);
String fieldValue = user.replaceAll("=", ":").replaceAll(":,", ": ,")
.replaceAll("(\\{|,)([^:]+)", "$1\"$2\"").replaceAll("([^:,\\}]+)(\\}|,)", "\"$1\"$2")
.replaceAll(" ", "");
if (!"".equals(fieldValue)) {
// 这里便拿到了每一个Json,可以转为实体类或者存储、处理等操作
JSONObject userJson = JSONUtil.parseObj(fieldValue).getJSONObject("user");
System.out.println(userJson);
}
}
}
}
// 对于切割的字符串进行校验
private static String verify(String jsonStr){
if(!jsonStr.startsWith("{")){
jsonStr = "{" + jsonStr;
}
if(!jsonStr.endsWith("}")){
jsonStr = jsonStr + "}";
}
return jsonStr;
}
结果:
{"name":"zhangsan","age":"4"}
{"name":"lisi","age":"5"}
这里是提供了一种解析思路,目前我也只想到了这一种处理方法,主要是利用字符串提供的replaceAll方法,如果有其他错误欢迎指正,也欢迎各位交流其他解决思路