MapToJsonConverter.java 3.79 KB
package com.xly.milvus.util;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.Map;

/**
 * Map 转 JsonObject 工具类
 */
public class MapToJsonConverter {

    /**
     * 将 Map<String, Object> 转换为 JsonObject
     */
    public static JsonObject convert(Map<String, Object> map) {
        JsonObject jsonObject = new JsonObject();

        if (map == null || map.isEmpty()) {
            return jsonObject;
        }

        for (Map.Entry<String, Object> entry : map.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();

            addToJson(jsonObject, key, value);
        }

        return jsonObject;
    }

    /**
     * 递归添加值到JsonObject
     */
    @SuppressWarnings("unchecked")
    private static void addToJson(JsonObject jsonObject, String key, Object value) {
        if (value == null) {
            jsonObject.add(key, null);
        } else if (value instanceof String) {
            jsonObject.addProperty(key, (String) value);
        } else if (value instanceof Number) {
            jsonObject.addProperty(key, (Number) value);
        } else if (value instanceof Boolean) {
            jsonObject.addProperty(key, (Boolean) value);
        } else if (value instanceof Character) {
            jsonObject.addProperty(key, (Character) value);
        } else if (value instanceof Map) {
            jsonObject.add(key, convert((Map<String, Object>) value));
        } else if (value instanceof List) {
            jsonObject.add(key, convertList((List<?>) value));
        } else if (value instanceof Object[]) {
            jsonObject.add(key, convertArray((Object[]) value));
        } else {
            // 其他类型转换为字符串
            jsonObject.addProperty(key, value.toString());
        }
    }

    /**
     * 转换List为JsonArray
     */
    private static JsonArray convertList(List<?> list) {
        JsonArray jsonArray = new JsonArray();

        for (Object item : list) {
            if (item == null) {
                jsonArray.add((JsonObject) null);
            } else if (item instanceof String) {
                jsonArray.add((String) item);
            } else if (item instanceof Number) {
                jsonArray.add((Number) item);
            } else if (item instanceof Boolean) {
                jsonArray.add((Boolean) item);
            } else if (item instanceof Character) {
                jsonArray.add((Character) item);
            } else if (item instanceof Map) {
                jsonArray.add(convert((Map<String, Object>) item));
            } else if (item instanceof List) {
                jsonArray.add(convertList((List<?>) item));
            } else {
                jsonArray.add(item.toString());
            }
        }

        return jsonArray;
    }

    /**
     * 转换数组为JsonArray
     */
    private static JsonArray convertArray(Object[] array) {
        JsonArray jsonArray = new JsonArray();

        for (Object item : array) {
            if (item == null) {
                jsonArray.add((JsonObject) null);
            } else if (item instanceof String) {
                jsonArray.add((String) item);
            } else if (item instanceof Number) {
                jsonArray.add((Number) item);
            } else if (item instanceof Boolean) {
                jsonArray.add((Boolean) item);
            } else if (item instanceof Character) {
                jsonArray.add((Character) item);
            } else if (item instanceof Map) {
                jsonArray.add(convert((Map<String, Object>) item));
            } else if (item instanceof List) {
                jsonArray.add(convertList((List<?>) item));
            } else {
                jsonArray.add(item.toString());
            }
        }

        return jsonArray;
    }
}