public Map<String, Object> convertToMap(final String json) {
        Map<String, Object> map = GSON_MAP.fromJson(json, new TypeToken<Map<String, Object>>() {
        }.getType());
        
        if (MapUtils.isEmpty(map)) {
            return map;
        }
        
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            if (value instanceof String) {
                String valueStr = ((String) value).trim();
                if (valueStr.startsWith(LEFT_ANGLE_BRACKETS) && valueStr.endsWith(RIGHT_ANGLE_BRACKETS)) {
                    Map<String, Object> mv = convertToMap(value.toString());
                    map.put(key, mv);
                }
            } else if (value instanceof JsonObject) {
                map.put(key, convertToMap(value.toString()));
            } else if (value instanceof JsonArray) {
                JsonArray jsonArray = (JsonArray) value;
                map.put(key, jsonArrayToListInConvertToMap(jsonArray));
            } else if (value instanceof JsonNull) {
                map.put(key, null);
            }
        }
        
        return map;
    }
@Test
    public void testConvertToMap() {
        List<Integer> innerList = ImmutableList.of(1, 2, 3);
        Map<String, Object> innerMap = ImmutableMap.of("id", 123, "name", "shenyu");
        Map<String, Object> map = ImmutableMap.of("code", 200, "message", "test",
                "data", innerMap, "list", innerList);

        String testJson = "{\"code\":200,\"message\":\"test\","
                + "\"data\":{\"id\":123,\"name\":\"shenyu\"},\"list\":[1,2,3]}";
        Map<String, Object> parseMap = GsonUtils.getInstance().convertToMap(testJson);

        map.forEach((key, value) -> {
            assertTrue(parseMap.containsKey(key));
            if (value instanceof Map) {
                Map<?, ?> tempMap = (Map<?, ?>) parseMap.get(key);
                ((Map<?, ?>) value).forEach((key1, value1) -> {
                    assertTrue(tempMap.containsKey(key1));
                    assertEquals(value1.toString(), tempMap.get(key1).toString());
                });
            } else if (value instanceof List) {
                List<?> tempList = (List<?>) parseMap.get(key);
                List<?> tempValue = (List<?>) value;
                for (int i = 0; i < tempValue.size(); i++) {
                    assertEquals(tempValue.get(i).toString(), tempList.get(i).toString());
                }
            } else {
                assertEquals(value.toString(), parseMap.get(key).toString());
            }
        });

        assertNull(GsonUtils.getInstance().convertToMap(null));
    }