Jackson:数组json字符串转对象集合(List)的两种方式

首先,创建个实体类Person

import java.util.List;

public class Person {

    private String name;
    private Integer age;
    private Gender gender;
    private List<String> hobbies;

    public enum Gender {
        MALE("male"),
        FEMALE("female");

        private String desc;

        Gender(String desc) {
            this.desc = desc;
        }
    }

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Person(String name, Integer age, Gender gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Gender getGender() {
        return gender;
    }

    public void setGender(Gender gender) {
        this.gender = gender;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }
}

 

下面开始创建对象集合personList,先用ObjectMapper将对象集合读成数组json字符串,然后用ObjectMapper将数组json字符串转回对象集合。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;

public class JsonDemo {

    public static void main(String[] args) throws JsonProcessingException {

        //创建对象集合,添加元素
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Tom", 18, Person.Gender.MALE));
        personList.add(new Person("Jim", 19, Person.Gender.MALE));
        personList.add(new Person("John", 18, Person.Gender.MALE));
        personList.add(new Person("Jacky", 19, Person.Gender.MALE));
        personList.add(new Person("Lily", 17, Person.Gender.FEMALE));
        personList.add(new Person("Lucy", 17, Person.Gender.FEMALE));
        personList.add(new Person("Rose", 18, Person.Gender.FEMALE));
        personList.add(new Person("Nancy", 18, Person.Gender.FEMALE));

        //循环遍历,往集合里继续添加元素
        for (int i = 0; i < 5; i++) {
            personList.addAll(personList);
        }
        //打印集合的元素个数
        System.out.println("personList.size: " + personList.size());




        ObjectMapper objectMapper = new ObjectMapper();
        //将对象集合读成数组json
        String personListJson = objectMapper.writeValueAsString(personList);



        //将数组json转成对象集合,方式1:
        ZonedDateTime start = ZonedDateTime.now(ZoneId.of("GMT+8"));
        System.out.println("start: " + start.toString());
        //关键:使用 objectMapper 的 readValue(String content, TypeReference<T> valueTypeRef) 方法
        List<Person> personList1 = objectMapper.readValue(personListJson, new TypeReference<List<Person>>() {});
        ZonedDateTime end = ZonedDateTime.now(ZoneId.of("GMT+8"));
        System.out.println("end: " + end.toString());
        long between = ChronoUnit.MILLIS.between(start, end);
        //方式1比较简单,但是耗时较多,是方式2的几十倍
        System.out.println("between: " + between);



        //将数组json转成对象集合,方式2:
        start = ZonedDateTime.now(ZoneId.of("GMT+8"));
        System.out.println("start: " + start.toString());
        //关键:使用 objectMapper 的 readValue(String content, JavaType valueType) 方法
        //注意:此方法返回的是Object,特此这里用了类型强转为List
        List o = (List) objectMapper.readValue(personListJson, objectMapper.getTypeFactory().constructParametricType(List.class, Person.class));
        end = ZonedDateTime.now(ZoneId.of("GMT+8"));
        System.out.println("end: " + end.toString());
        long until = start.until(end, ChronoUnit.MILLIS);
        //方式2略复杂,但是耗时较少
        System.out.println("until: " + until);
    }

}

 

 

 

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Jackson可以将JSON字符串转换为Java对象,也可以将Java对象转换JSON字符串。如果要将JSON字符串转换List集合,可以使用以下代码: ``` ObjectMapper objectMapper = new ObjectMapper(); List<MyObject> myObjects = objectMapper.readValue(jsonString, new TypeReference<List<MyObject>>(){}); ``` 其中,MyObject是自定义的Java对象jsonString是要转换JSON字符串。使用TypeReference可以指定要转换集合类型。转换后,myObjects就是一个List集合,其中包含了从JSON字符串中解析出来的多个MyObject对象。 注意,使用Jackson进行JSON转换时,需要引入jackson-databind库。 ### 回答2: 在Java中,我们可以使用Jackson库将JSON转换List集合。 首先,我们需要在pom.xml文件中添加Jackson库的依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> ``` 然后,我们可以使用以下代码将JSON字符串转换List集合: ```java import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.List; public class JsonToListConverter { public static void main(String[] args) { String jsonString = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Jane\",\"age\":25}]"; ObjectMapper objectMapper = new ObjectMapper(); try { List<Person> personList = objectMapper.readValue(jsonString, new TypeReference<List<Person>>() {}); for (Person person : personList) { System.out.println("Name: " + person.getName() + ", Age: " + person.getAge()); } } catch (IOException e) { e.printStackTrace(); } } private static class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } } ``` 在上面的代码中,我们首先定义了一个包含"name"和"age"属性的Person类。然后,我们使用ObjectMapper类的readValue方法将JSON字符串转换List<Person>类型,并使用TypeReference将其指定为目标类型。 最后,我们可以遍历List集合并访问每个Person对象的属性。 这样,我们就成功地将JSON转换List集合了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值