Java对象与Map相互转换和Map转换为Json字符串_两个map分别作为key和value转为json-程序员宅基地

技术标签: java  json  L01-Java基础  开发语言  

记录:265

场景:Java对象转换为Map;Map转换为Java对象;Map转换为Json字符串。

本例环境:JDK 1.8

1.Java对象转换为Map

普通java对象的属性和属性值,转换为Map的Key和Value。

方法:

public static Map<String, Object> object2Map(Object obj) throws Exception {
 Map<String, Object> map = new HashMap<String, Object>();
 Field[] fields = obj.getClass().getDeclaredFields();
 for (Field field : fields) {
   field.setAccessible(true);
   map.put(field.getName(), field.get(obj));
 }
 return map;
}

测试:

GirlInfo girlInfo2 = new  GirlInfo("小州",Double.valueOf("165"),
    Double.valueOf("102"),"C","杭州");
Map<String,Object> map2 = MapToObjectUtils.object2Map(girlInfo2);

2.Map转换为Java对象

Map的Key和Value转换为普通java对象的属性和属性值。

方法:

public static <T> T map2Object(Map<String, Object> map, Class<T> clazz) {
  if (map == null) {
      return null; }
  T obj = null;
  try {
   obj = clazz.newInstance();
   Field[] fields = clazz.getDeclaredFields();
   for (Field field : fields) {
    int modifiers = field.getModifiers();
    //判断Static属性或者Final属性
    if (Modifier.isStatic(modifiers) || Modifier.isFinal(modifiers)) {
        continue;
    } else {
      //设置为true后,反射即可访问私有变量
      field.setAccessible(true);
      field.set(obj, map.get(field.getName()));
    }}
  } catch (Exception e) {
     e.printStackTrace();
  }
     return obj;
}

测试:

Map<String,Object> map = new HashMap<String,Object>();
map.put("name","小杭");
map.put("height",Double.valueOf("162"));
map.put("weight",Double.valueOf("100"));
map.put("cup","B");
map.put("city","杭州");
GirlInfo girlInfo = MapToObjectUtils.map2Object(map,GirlInfo.class);

3.Map转换为Json字符串

Map的Key和Value转换为JSON字符串格式。

方法:

public static String mapToJsonString(Map map){
  JSONObject json = new JSONObject();
  Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
  while (entries.hasNext()) {
    Map.Entry<String, String> entry = entries.next();
    json.put(entry.getKey(),entry.getValue());
  }
  return json.toString();
}

测试:

Map<String,Object> map3 = new HashMap<String,Object>();
map3.put("name","小杭");
map3.put("height",Double.valueOf("162"));
map3.put("weight",Double.valueOf("100"));
map3.put("cup","B");
map3.put("city","杭州");
String result = MapToObjectUtils.mapToJsonString(map3);

数据格式:

{
  "city":"杭州",
  "name":"小杭",
  "weight":100.0,
  "height":162.0,
  "cup":"B"
}

4.实体类GirlInfo

测试中使用到的GirlInfo类

public class GirlInfo implements Serializable {

 private String name;
 private Double height;
 private Double weight;
 private String cup;
 private String city;
 public GirlInfo(){}
 public GirlInfo(String name,Double height, 
     Double weight,String cup,String city){
  this.name = name;
  this.height = height;
  this.weight = weight;
  this.cup=cup;
  this.city = city;
 }
 public String getName() {
     return name;
 }
 public void setName(String name) {
     this.name = name;
 }
 public Double getHeight() {
     return height;
 }
 public void setHeight(Double height) {
     this.height = height;
 }
 public Double getWeight() {
     return weight;
 }
 public void setWeight(Double weight) {
     this.weight = weight;
 }
 public String getCup() {
     return cup;
 }
 public void setCup(String cup) {
     this.cup = cup;
 }
 public String getCity() {
     return city;
 }
 public void setCity(String city) {
     this.city = city;
 }
}

以上,感谢。

2021年12月16日

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangbeizhen18/article/details/121969787

智能推荐

某鱼wasm逆向_某鱼 逆向-程序员宅基地

文章浏览阅读1.2k次,点赞18次,收藏15次。斗鱼、wasm、js逆向、web逆向。_某鱼 逆向

sicily1029 Rabbit 中大OJ解题报告-程序员宅基地

文章浏览阅读737次。由于中大的oj需要内网才能进去,就提供不了原始题目了,但是题目的意思就是说,开始有一对成年兔子,一对成年兔子每年能生一对幼兔,幼兔等m个月才成长为成年兔子,问d个月后总共有多少对兔子。输入m d 2 3 3 5 1 100输出 5 9 100题目意思相信大家都能明白,那么解题思路又是怎么样的呢我来大概说一下,先找到兔子增长_中大oj

C程序设计第五版谭浩强 || 第四章习题答案-程序员宅基地

文章浏览阅读1.5k次,点赞40次,收藏34次。【代码】C程序设计第五版谭浩强 || 第四章习题答案

CPO-CNN-LSTM分类预测,【24新算法】冠豪猪算法CPO优化卷积神经网络-长短期记忆网络多特征分类预测-程序员宅基地

文章浏览阅读161次。CPO-CNN-LSTM分类预测,【24新算法】冠豪猪算法CPO优化卷积神经网络-长短期记忆网络多特征分类预测

非Root或Administrator账户下运行Nginx_nginx用什么用户启动-程序员宅基地

文章浏览阅读1.4k次。这样,就可以在CentOS系统中使用普通用户身份来管理和启动Nginx服务了。请注意,对于其他需要管理员权限才能完成的操作(如修改系统文件等),还需要使用sudo命令或者切换到管理员账户进行操作。下载并安装Nginx,保证Nginx可执行文件所在的路径对普通用户具有可读、可执行的权限。安装过程中,在指定 Nginx 配置文件路径时要特别注意,确保可访问并正确填写。启动Nginx服务。是您实际安装Nginx时配置文件存放的路径。_nginx用什么用户启动

【解决】无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]_无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[h-程序员宅基地

文章浏览阅读6.8k次。问题描述:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]在调用<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>时出现异常调用tomcat服务器时,页面出错:原因分析:首先确认导入的jar包是否正确经过多次导包还是老样子,在网上也找了挺多方法,但都不凑效解决方案:方案一:重新导入jar包如果是jar包缺失_无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[h

随便推点

pipenv—不可不知的python包管理利器-程序员宅基地

文章浏览阅读258次。一 前言最近我们的檀神在学习python时提了一个很好的问题,让我觉得有必要把它梳理下分享给更多的学习者。剧情回顾:檀神安装了python3的版本,想在我16年基于python2写的工具的基础上增加功能,但发现工具的一个模块还不支持python3。这就尴尬了,是要重装python2的版本?还是用python3的模块重写工具?不管哪种方式,似乎都挺折腾。其实,这只是python..._launching subshell in virtual environment... windows powershell 版权所有(c)

Oracle列转行函数 Listagg() 语法详解及应用实例_oracle9 listagg-程序员宅基地

文章浏览阅读6w次,点赞12次,收藏65次。工作中用到一段比较复杂的SQL查询脚本,使用了listagg()函数实现了具有多个值的字段的填充(即,列表聚合,list aggregation(我猜的))。说简单点,listagg()函数可以实现多列记录聚合为一条记录,从而实现数据的压缩、致密化(data densification)。以下内容转载自http://dacoolbaby.iteye.com/blog/1698957,SQL脚本做了..._oracle9 listagg

InnoDB在SQL查询中的关键功能和优化策略-程序员宅基地

文章浏览阅读1.9k次,点赞41次,收藏32次。通过上篇文章《MySQL的体系结构与SQL的执行流程》了解了SQL语句的执行流程以及MySQL体系结构中**「连接器」「SQL接口」「解析器」「优化器」「执行器」**的功能以及在整个流程中的作用。不过上篇文章留了个尾巴,在执行器调用存储引擎后,存储引擎内部做了什么事没有进一步说明,本文会对此展开介绍,使得我们对SQL整体的执行流程有更加清晰的认识。先了解下存储引擎是干什么的。

优动漫PAINT-超简单灌木教程-程序员宅基地

文章浏览阅读93次。超简单灌木教程~零基础神马的都能神还原哦!优动漫PAINT下载:http://wm.makeding.com/iclk/?zoneid=18597想要Get到更多有关优动漫的信息包括软件下载,可关注优动漫PAINT中文官网哦!转载于:https://www.cnblogs.com/danzi/p/8527177.html..._优动漫边缘上色

Netty 1-程序员宅基地

文章浏览阅读716次,点赞24次,收藏27次。Channel与BufferJava NIO系统的核心通道(Channel)和缓冲区(Buffer)。通道表示打开到 IO 设备(例如:文件、套接字)的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理简而言之,通道负责传输,缓冲区负责存储常见的Channel有以下四种,其中FileChannel主要用于文件传输,其余三种用于网络通信Buffer有以下几种,其中使用较多的是ByteBufferByteBuffer。

VS 设置 C# 以下划线 _ 开头命名全局字段_visual studio 命名规则以_开头给-程序员宅基地

文章浏览阅读2.1k次,点赞3次,收藏5次。VS 设置 C# 以下划线 _ 开头命名全局字段设置方法之前在某位大神的博客有看到这个设置方法,换电脑以后再找那个文章却找不到了,按回忆找到了设置方法,故写出来分享给大家。private readonly SearchResult _searchResult;设置方法以2019企业版为例,找到:工具 - 选项 - 文本编辑器 - C# - 代码样式 - 命名点击“管理命名样式”,然后再点左下角加号,新建一个命名规范,标题可以自己拟定,设置“必填前缀”为“_”,选择“camel 事例名称”,确_visual studio 命名规则以_开头给

推荐文章

热门文章

相关标签