pom.xml引入
- 此次引入 阿里 fastjson 使用谷歌gson类似
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
示例代码
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import java.util.HashMap;
import java.util.Map;
/**
* JsonToMapTest
*
* @author weigang
* @create 2019-08-01
**/
public class JsonToMapTest {
public static void main(String[] args) {
// key beanName(在Spring容器中注册)
// 场景: 应用于微信配置动态更新 便于动态注册单例Bean 假如User属性对应微信配置的属性,当配置修改后可以动态更新
// 这样设置的原因 直接通过key判断是否存在,存在则调用 DefaultListableBeanFactory.destroySingleton(beanName) 删除
// 不存在 则直接注册 DefaultListableBeanFactory.registerSingleton(beanName, User);
Map<String, User> params = new HashMap<String, User>();
params.put("user1", new User(123, "user1Name", "user1Address"));
params.put("user2", new User(456, "user2Name", "user2Address"));
String jsonMapStr = JSON.toJSONString(params);
Map<String, User> map0 = JSONObject.parseObject(jsonMapStr, Map.class);
System.out.println(map0);
Map<String, User> map1 = (Map) JSONObject.parseObject(jsonMapStr);
System.out.println(map1);
// 使用 parseObject 重载方式 即可正确转换泛型格式的Map、List、Set等
// <T> T parseObject(String text, TypeReference<T> type, Feature... features)
Map<String, User> map2 = JSONObject.parseObject(jsonMapStr, new TypeReference<Map<String, User>>() {
});
System.out.println(map2);
}
}
- 直接通过方法 T parseObject(String text, Class clazz) 不能正确转换
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190801094855524.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaWdhbmcyMDA4MjBjaGVuZ2R1,size_16,color_FFFFFF,t_70)
- 使用强转 (Map)JSONObject parseObject(String text) 也不能正确转换
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190801095031609.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaWdhbmcyMDA4MjBjaGVuZ2R1,size_16,color_FFFFFF,t_70)
- 使用 parseObject 重载方法 T parseObject(String text, TypeReference type, Feature… features) 这里的T即为需要转换出来泛型
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190801095331359.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaWdhbmcyMDA4MjBjaGVuZ2R1,size_16,color_FFFFFF,t_70)
- 通过底层源码 即可知道正确转换格式
![-](https://img-blog.csdnimg.cn/20190801095552757.png)