|
|
@@ -0,0 +1,159 @@
|
|
|
+package cn.start.tz.module.pressure2.util;
|
|
|
+
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONException;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * JSON数组转换工具类
|
|
|
+ * 用于处理数据库存储的JSON格式字符串数组
|
|
|
+ *
|
|
|
+ * @author 特种管理员
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+public class JsonArrayUtil {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将字符串列表转换为JSON字符串,用于数据库存储
|
|
|
+ *
|
|
|
+ * @param list 字符串列表
|
|
|
+ * @return JSON字符串
|
|
|
+ */
|
|
|
+ public static String listToJson(List<String> list) {
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
+ return "[]";
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return JSON.toJSONString(list);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("列表转JSON字符串失败: {}", list, e);
|
|
|
+ return "[]";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将JSON字符串解析为字符串列表
|
|
|
+ *
|
|
|
+ * @param jsonStr JSON字符串
|
|
|
+ * @return 字符串列表
|
|
|
+ */
|
|
|
+ public static List<String> jsonToList(String jsonStr) {
|
|
|
+ if (StrUtil.isBlank(jsonStr)) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ // 尝试解析为JSON数组
|
|
|
+ JSONArray jsonArray = JSON.parseArray(jsonStr);
|
|
|
+ if (jsonArray != null) {
|
|
|
+ List<String> result = new ArrayList<>();
|
|
|
+ for (int i = 0; i < jsonArray.size(); i++) {
|
|
|
+ Object item = jsonArray.get(i);
|
|
|
+ if (item != null) {
|
|
|
+ result.add(item.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ } catch (JSONException e) {
|
|
|
+ // 如果不是有效的JSON数组格式,可能是逗号分隔的字符串
|
|
|
+ log.debug("JSON解析失败,尝试按逗号分割: {}", jsonStr);
|
|
|
+ return parseCommaSeparated(jsonStr);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("JSON字符串解析失败: {}", jsonStr, e);
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析逗号分隔的字符串为列表
|
|
|
+ *
|
|
|
+ * @param str 逗号分隔的字符串
|
|
|
+ * @return 字符串列表
|
|
|
+ */
|
|
|
+ private static List<String> parseCommaSeparated(String str) {
|
|
|
+ if (StrUtil.isBlank(str)) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ List<String> result = new ArrayList<>();
|
|
|
+ String[] items = str.split(",");
|
|
|
+ for (String item : items) {
|
|
|
+ String trimmed = item.trim();
|
|
|
+ if (StrUtil.isNotBlank(trimmed)) {
|
|
|
+ result.add(trimmed);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("逗号分隔字符串解析失败: {}", str, e);
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 向JSON数组字符串中添加元素
|
|
|
+ *
|
|
|
+ * @param jsonStr 原JSON字符串
|
|
|
+ * @param element 要添加的元素
|
|
|
+ * @return 更新后的JSON字符串
|
|
|
+ */
|
|
|
+ public static String addElement(String jsonStr, String element) {
|
|
|
+ List<String> list = jsonToList(jsonStr);
|
|
|
+ if (StrUtil.isNotBlank(element) && !list.contains(element)) {
|
|
|
+ list.add(element);
|
|
|
+ }
|
|
|
+ return listToJson(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从JSON数组字符串中移除元素
|
|
|
+ *
|
|
|
+ * @param jsonStr 原JSON字符串
|
|
|
+ * @param element 要移除的元素
|
|
|
+ * @return 更新后的JSON字符串
|
|
|
+ */
|
|
|
+ public static String removeElement(String jsonStr, String element) {
|
|
|
+ List<String> list = jsonToList(jsonStr);
|
|
|
+ list.remove(element);
|
|
|
+ return listToJson(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查JSON数组字符串是否包含指定元素
|
|
|
+ *
|
|
|
+ * @param jsonStr JSON字符串
|
|
|
+ * @param element 要检查的元素
|
|
|
+ * @return 是否包含
|
|
|
+ */
|
|
|
+ public static boolean contains(String jsonStr, String element) {
|
|
|
+ List<String> list = jsonToList(jsonStr);
|
|
|
+ return list.contains(element);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取JSON数组字符串的大小
|
|
|
+ *
|
|
|
+ * @param jsonStr JSON字符串
|
|
|
+ * @return 数组大小
|
|
|
+ */
|
|
|
+ public static int size(String jsonStr) {
|
|
|
+ List<String> list = jsonToList(jsonStr);
|
|
|
+ return list.size();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查JSON数组字符串是否为空
|
|
|
+ *
|
|
|
+ * @param jsonStr JSON字符串
|
|
|
+ * @return 是否为空
|
|
|
+ */
|
|
|
+ public static boolean isEmpty(String jsonStr) {
|
|
|
+ return size(jsonStr) == 0;
|
|
|
+ }
|
|
|
+}
|