使用Jackson实现Map与Bean互转方式

Jackson Map与Bean互转

在使用 java 开发中,通常需要把 Map 转成 Bean,或把 Bean 转成 Map,这就用的工具类,在此推荐使用import com.fasterxml.jackson.databind.ObjectMapper;包下的ObjectMapper类,比 JsonObject 效率高

下面就列举了几种使用方法

1、pom.xml

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
    <scope>compile</scope>
</dependency>

2、java 代码

package com.jin.demo.jackson;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
/**
 * 使用 Jackson工具
 * map to bean
 * bean to map
 *
 * @auther jinsx
 * @date 2019-03-26 16:37
 */
public class JacksonTest {
    private static final ObjectMapper mapper = new ObjectMapper();
    public static void main(String[] args) throws Exception {
        // 测试 将Map转成指定的Bean
        Map<String, Object> map = new HashMap<>();
        map.put("name", "张三");
        Person o = (Person)JacksonTest.mapToBean(map, Person.class);
        System.out.println(o);
        // 测试 将Bean转成Map
        Person person = new Person();
        person.setAge(18);
        Map map1 = JacksonTest.beanToMap(person);
        System.out.println(map1);
    }
    // 将对象转成字符串
    public static String objectToString(Object obj) throws Exception {
        return mapper.writeValueAsString(obj);
    }
    // 将Map转成指定的Bean
    public static Object mapToBean(Map map, Class clazz) throws Exception {
        return mapper.readValue(objectToString(map), clazz);
    }
    // 将Bean转成Map
    public static Map beanToMap(Object obj) throws Exception {
        return mapper.readValue(objectToString(obj), Map.class);
    }
}

3、Person 类

package com.jin.demo.jackson;
import java.io.Serializable;
import java.util.Date;
/**
 * @auther jinsx
 * @date 2019-03-26 17:30
 */
public class Person implements Serializable {
    private int age;
    private String name;
    private Date birthday;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", birthday=" + birthday +
                '}';
    }
}

Jackson-ObjectMapper json字符串、bean、map、list互相转换

1、对象转json字符串

ObjectMapper mapper = new ObjectMapper();
User user = new User();
String userJson = mapper.writeValueAsString(user);

2、Map转json字符串

ObjectMapper mapper = new ObjectMapper();
Map map = new HashMap();
String json = mapper.writeValueAsString(map);

3、数组list转json字符串

ObjectMapper mapper = new ObjectMapper();
User[] uArr = {user1, user2};
String jsonfromArr = mapper.writeValueAsString(uArr);

4、json字符串转对象

ObjectMapper mapper = new ObjectMapper();
String expected = "{\"name\":\"ZhangSan\"}";
User user = mapper.readValue(expected, User.class);

5、json字符串转Map

ObjectMapper mapper = new ObjectMapper();
String expected = "{\"name\":\"ZhangSan\"}";
Map userMap = mapper.readValue(expected, Map.class);

6、json字符串转对象数组List

ObjectMapper mapper = new ObjectMapper();
String expected = "[{\"name\":\"Zhangsan\"},{\"name\":\"Lisi\"}]";
CollectionType listType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, User.class);
List<User> userList = mapper.readValue(expected, listType);

7、json字符串转Map数组List<Map<String,Object>>

ObjectMapper mapper = new ObjectMapper();
String expected = "[{\"name\":\"Zhangsan\"},{\"nameEn\":\"Lisi\"}]";
CollectionType listType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, Map.class);
List<Map<String,Object>> userList = mapper.readValue(expected, listType);

8、jackson默认将对象转换为LinkedHashMap

ObjectMapper mapper = new ObjectMapper();
String expected = "[{\"name\":\"Zhangsan\"},{\"nameEn\":\"Lisi\"},{\"name\":\"Test\"}]";
ArrayList arrayList = mapper.readValue(expected, ArrayList.class);

9、json字符串转对象设置格式

ObjectMapper mapper = new ObjectMapper();
//设置date转换格式
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mapper.setDateFormat(fmt);
String expected = "{\"name\":\"ZhangSan\",\"bir\":\"2021-04-15 14:00:00\"}";
User user = mapper.readValue(expected, User.class);

10、忽略未知字段

ObjectMapper mapper = new ObjectMapper();
//设置忽略未知字段
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String expected = "{\"name\":\"ZhangSan\",\"job\":\"teacher\"}";
User user = mapper.readValue(expected, User.class);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java中json与javaBean几种互转的讲解

    一.java普通对象和json字符串的互转 java对象---->json 首先创建一个java对象: public class Student { //姓名 private String name; //年龄 private String age; //住址 private String address; public String getName() { return name; } public void setName(String name) { this.name = name; }

  • java的Jackson将json字符串转换成泛型List

    Jackson,我感觉是在Java与Json之间相互转换的最快速的框架,当然Google的Gson也很不错,但是参照网上有人的性能测试,看起来还是Jackson比较快一点 Jackson处理一般的JavaBean和Json之间的转换只要使用ObjectMapper 对象的readValue和writeValueAsString两个方法就能实现.但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型 为泛型的Collection Type. 如果

  • 解决Jackson反序列化map,set等复杂类型问题

    工作中遇到了这个问题,我简单的用代码复现一下,就是一个map,value又为一个set,导致反序列化报错 @Test public void test10() throws Exception { //准备一下数据 Map<String, Set<String>> map = new HashMap<>(); map.put("aaa",new HashSet<String>(){{add("111");add(&qu

  • Json字符串与Object、List、Map的互转工具类

    package com.cq2022.zago.base.util; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.List; import java.util.Map; import org.codehaus.jackson.JsonFactory; import org.codehau

  • 使用Jackson实现Map与Bean互转方式

    Jackson Map与Bean互转 在使用 java 开发中,通常需要把 Map 转成 Bean,或把 Bean 转成 Map,这就用的工具类,在此推荐使用import com.fasterxml.jackson.databind.ObjectMapper;包下的ObjectMapper类,比 JsonObject 效率高 下面就列举了几种使用方法 1.pom.xml <dependency> <groupId>com.fasterxml.jackson.core</gro

  • Java代码实现Map和Object互转及Map和Json互转

    先给大家介绍下map和object互相转换的代码. 具体代码如所示: /** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newI

  • @ConfigurationProperties绑定配置信息至Array、List、Map、Bean的实现

    相关说明: 在SpringBoot中,我们可以通过以下几种方式获取并绑定配置文件中的信息: @Value注解. 使用Environment. @ConfigurationProperties注解. 通过实现ApplicationListener接口,注册监听器,进行硬编码获取,可参考:https://www.jb51.net/article/187407.htm 硬编码加载文件获取. -- 注:一般情况下,第一种.第二种就够用了;但是如果想直接从配置文件中获取到数组.list.map.对象的话,

  • Spring注入Bean的一些方式总结

    通过注解注入Bean 背景 我们谈到Spring的时候一定会提到IOC容器.DI依赖注入,Spring通过将一个个类标注为Bean的方法注入到IOC容器中,达到了控制反转的效果.那么我们刚开始接触Bean的时候,一定是使用xml文件,一个一个的注入,就例如下面这样. <bean id="bean" class="beandemo.Bean" /> 我们的项目一般很大的话,就需要成千上百个Bean去使用,这样写起来就很繁琐.那么Spring就帮我们实现了一

  • 关于@Bean的使用方式

    目录 一个对象 获取这个类的方法 1.AnnotationConfigApplicationContext 类获取 2.在spring自动创建的类中 3.使用 @Autowired 注解获取变量 @Bean 注解的属性解析 @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里. 目的是创建一个类.当spring需要创建指定的一个类时会调用这个注解(@Bean)的方法. 一个对象 @Data @AllArgsConstructo

  • jQuery中map函数的两种方式

    两种方式: 1.直接jQuery.map //将原数组中每个元素加 4 转换为一个新数组. $.map( [0,1,2], function(n){ return n + 4; }); //结果: [4, 5, 6] //原数组中每个元素扩展为一个包含其本身和其值加 1 的数组,并转换为一个新数组 $.map( [0,1,2], function(n){ return [ n, n + 1 ]; }); //结果: [0, 1, 1, 2, 2, 3] 2.遍历对象.map 例子: <form

  • Java遍历Map对象的四种方式

    关于java中遍历map具体哪四种方式,请看下文详解吧. 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.g

  • Spring中Bean的命名方式代码详解

    本文主要描述的是关于spring中bean的命名方式,通过简单实例向大家介绍了六种方式,具体如下. 一般情况下,在配置一个Bean时需要为其指定一个id属性作为bean的名称.id在IoC容器中必须是唯一的,此外id的命名需要满足xml对id的命名规范. 在实际情况中,id命名约束并不会给我们带来影响.但是如果用户确实希望用到一些特殊字符来对bean进行命名,那么可以使用bean的name属性来进行命名,name属性没有字符上的限制,几乎可以使用任何字符. 每个Bean可以有一个或多个id,我们

  • C++ 整型与字符串的互转方式

    flyfish 字符串转整型 C的方法 cstr是char*或者const char*类型的字符串 int num = atoi(str); int num = strtol(cstr, NULL, 10); //10 表示进制 C++11的方法 void test1() { std::string str1 = "1"; std::string str2 = "1.5"; std::string str3 = "1 with words"; i

随机推荐