Explorar o código

[bug-4663] 删除题库,操作日志解析JSON失败

huangws hai 10 meses
pai
achega
f87a18cfc1

+ 4 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/service/impl/AuditServiceImpl.java

@@ -13,6 +13,7 @@ import com.lc.ibps.cloud.entity.APIResult;
 import com.lc.ibps.cloud.message.util.MessageQueueProductorUtil;
 import com.lc.ibps.common.api.INewsMgrService;
 import com.lc.ibps.common.system.persistence.entity.NewsPo;
+import com.lc.ibps.untils.JsonUtil;
 import com.lc.ibps.untils.SqlUtil;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.stereotype.Service;
@@ -338,6 +339,9 @@ public class AuditServiceImpl implements AuditService {
                     replaceAll("\"\\[","[").replaceAll("]\"","]");
             //预处理,去除空格和换行符导致json转换失败问题
             replaceSql = replaceSql.trim().replace("\r\n", "\\r\\n").replace("\n", "\\n");
+            JSONArray jsonArray = JsonUtil.parseToArray(replaceSql);   //解决json字符串中包含json对象报错问题
+//            JSONArray jsonArray = JSONUtil.parseArray(replaceSql);
+            //JSONArray jsonArray = JSONUtil.parseArray(map.get("data_").toString());
             JSONArray jsonArray = JSONUtil.parseArray(replaceSql);
             StringBuilder sqlBuilder = new StringBuilder();
             for (int i = 0; i < jsonArray.size(); i++) {

+ 40 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/untils/JsonUtil.java

@@ -0,0 +1,40 @@
+package com.lc.ibps.untils;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class JsonUtil {
+    private static final Pattern NESTED_JSON_PATTERN =
+            Pattern.compile("\"(\\w+)\":\"(\\{.*?\\})\"");
+
+    public static String fixNestedJson(String jsonStr) {
+        // 处理嵌套JSON结构
+        Matcher matcher = NESTED_JSON_PATTERN.matcher(jsonStr);
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(sb,
+                    "\"" + matcher.group(1) + "\":" + matcher.group(2));
+        }
+        matcher.appendTail(sb);
+
+        // 处理常见格式问题
+        return sb.toString()
+                .replaceAll("\\\\\"", "\"")  // 处理转义引号
+                .replaceAll("\"\\[", "[")   // 处理数组开头
+                .replaceAll("\\]\"", "]")   // 处理数组结尾
+                .replaceAll("\\\\r\\\\n", "\\\\n") // 统一换行符
+                .trim();
+    }
+
+    public static JSONObject parseToObject(String jsonStr) {
+        return JSONUtil.parseObj(fixNestedJson(jsonStr));
+    }
+
+    public static JSONArray parseToArray(String jsonStr) {
+        return JSONUtil.parseArray(fixNestedJson(jsonStr));
+    }
+}