直接上代码记录下。我代码里没有Gson包,用的是nacos对Gson的封装,只是包不同,方法都一样
import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.*;import java.util.Map;
import java.lang.reflect.*;
import java.util.*;public class TestJson {static class MapDeserializer implements JsonDeserializer<Map<String, Object>> {@Overridepublic Map<String, Object> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {if (json.isJsonObject()) {JsonObject jsonObject = json.getAsJsonObject();Map<String, Object> map = new HashMap<>();for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {String key = entry.getKey();JsonElement value = entry.getValue();if (value.isJsonPrimitive() && value.getAsJsonPrimitive().isNumber()) {JsonPrimitive primitive = value.getAsJsonPrimitive();if (primitive.isNumber()) {if (primitive.getAsString().contains(".")) {map.put(key, primitive.getAsDouble());} else {map.put(key, primitive.getAsInt());}}} else if (value.isJsonObject()) {map.put(key, deserialize(value, typeOfT, context));} else if (value.isJsonArray()) {map.put(key, processList(value.getAsJsonArray(), context));} else if (value.isJsonNull()) {map.put(key, null);} else {throw new JsonParseException("Unsupported value type: " + value.getClass());}}return map;} else {throw new JsonParseException("Expected JsonObject, but got: " + json.getClass());}}private List<Object> processList(JsonArray array, JsonDeserializationContext context) {List<Object> list = new ArrayList<>();for (JsonElement element : array) {if (element.isJsonPrimitive() && element.getAsJsonPrimitive().isNumber()) {JsonPrimitive primitive = element.getAsJsonPrimitive();if (primitive.isNumber()) {if (primitive.getAsString().contains(".")) {list.add(primitive.getAsDouble());} else {list.add(primitive.getAsInt());}}} else if (element.isJsonObject()) {list.add(deserialize(element, null, context));} else if (element.isJsonArray()) {list.add(processList(element.getAsJsonArray(), context));} else if (element.isJsonNull()) {list.add(null);} else {throw new JsonParseException("Unsupported value type: " + element.getClass());}}return list;}}class BkR<T> {private boolean result;private T data;public boolean isResult() {return result;}public void setResult(boolean result) {this.result = result;}public T getData() {return data;}public void setData(T data) {this.data = data;}}public static void main(String[] args) {String json = "{\"result\": true, \"data\": {\"aaa\":1, \"bbb\":{\"ab\":[{\"a\":1},{\"a\":2}],\"ccc\":{\"bdd\":[111,222,333,444]}}}}";Gson gson = new GsonBuilder().registerTypeAdapter(new TypeToken<Map<String, Object>>() {}.getType(), new MapDeserializer()).create();BkR<Map<String, Object>> bkr = gson.fromJson(json, new TypeToken<BkR<Map<String, Object>>>() {}.getType());System.out.println(bkr);}
}
输出信息: