文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中Json与List、Map、entity怎么互相转化

2023-07-02 18:19

关注

本篇内容介绍了“Java中Json与List、Map、entity怎么互相转化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

第一步:导入依赖

        <dependency>            <groupId>com.google.code.gson</groupId>            <artifactId>gson</artifactId>            <version>2.8.6</version>        </dependency>

第二步:开始使用

场景一:转换普通对象(Bean)。

将普通的JavaBean转换为Json字符串是最常用的操作了,首先创建一个简单的类,例如:Person。

public class Person{    private String name;    private int age;    private boolean isMale;    private List<String> hobbies;    // 省略构造器和getter/setter方法,注意重写toString方法,便于查看控制台输出。    @Override    public String toString()    {        final StringBuilder sb = new StringBuilder("Person{");        sb.append("name='").append(name).append('\'');        sb.append(", age=").append(age);        sb.append(", isMale=").append(isMale);        sb.append(", hobbies=").append(hobbies);        sb.append('}');        return sb.toString();    }}

使用Gson解析Person的实例。

    1  先创建Person对象。
    2  在创建Gson对象。
    3  调用Gson的String toJson(Object)方法,来将对象转换为json字符串。

@Testpublic void testBeanToJson(){    // 创建Bean    Person p = new Person("艾伦·耶格尔", 16, true, Arrays.asList("自由", "迫害莱纳"));    // 创建Gson对象    Gson gson = new Gson();    // 调用Gson的String toJson(Object)方法将Bean转换为json字符串    String pJson = gson.toJson(p);    System.out.println(pJson);    // {"name":"艾伦·耶格尔","age":16,"isMale":true,"hobbies":["自由","迫害莱纳"]}}

将Person实例的json字符串转换为Person对象。

调用Gson的 t fromJson(String, Class)方法,将Json串转换为对象

// 调用Gson的 <T> t fromJson(String, Class)方法,将Json串转换为对象Person person = gson.fromJson(pJson, Person.class);System.out.println(person);// Person{name='艾伦·耶格尔', age=16, isMale=true, hobbies=[自由, 迫害莱纳]}

使用场景二:转换List集合。

@Testpublic void testListToJson(){    // 先准备一个List集合    List<Person> list = new ArrayList<Person>();    list.add(new Person("三笠·阿克曼", 16, false, Arrays.asList("砍巨人", "保护艾伦")));    list.add(new Person("阿明·阿诺德", 16, true, Arrays.asList("看书", "玩海螺")));    System.out.println(list);    // 创建Gson实例    Gson gson = new Gson();    // 调用Gson的toJson方法    String listJson = gson.toJson(list);    System.out.println(listJson);    // [{"name":"三笠·阿克曼","age":16,"isMale":false,"hobbies":["砍巨人","保护艾伦"]},{"name":"阿明·阿诺德","age":16,"isMale":true,"hobbies":["看书","玩海螺"]}]}

Json转List对象

由于List接口带泛型,如果还调用 t fromJson(String, Class)方法,那么返回的虽然还是个List集合,但是集合里面的数据却不是Person对象,而是Map对象,并将Person属性以键值对的形式存放在Map的实例中。让我们来验证一下。

......// 此处延续以上代码List fromJson = gson.fromJson(listJson, List.class);System.out.println(fromJson.get(0).getClass());// class com.google.gson.internal.LinkedTreeMap

要想获取的List还和之前的一毛一样,那么我们需要调用Gson的 T fromJson(String, Type) 方法。如下:

此方法参数中的Type类型可以通过Gson包提供TypeToken<>类获取。这个类带有泛型,且这个泛型就是Json串转换成为对象后的类型(此处是List)我们不需要重写这个类中的任何方法,只需要创建这个类的一个匿名内部类并调用getTpye()方法即可。

注意:一定要将这个匿名内部类的泛型写为Json字符串解析后生成的对象类型。

......// 此处延续以上代码// 调用Gson的 T fromJson(String, Type)将List集合的json串反序列化为List对象List<Person> plist = gson.fromJson(listJson, new TypeToken<List<Person>>(){}.getType());System.out.println(plist);// [Person{name='三笠·阿克曼', age=16, isMale=false, hobbies=[砍巨人, 保护艾伦]}, Person{name='阿明·阿诺德', age=16, isMale=true, hobbies=[看书, 玩海螺]}]

使用场景三:转换Map集合。

转换Map的步骤就和转换List的步骤一模一样了,代码如下。详解请看List转换。

@Testpublic void testMapToJson(){    Map<String, Person> map = new HashMap<>();    map.put("p1", new Person("利威尔·阿克曼", 35, true, Arrays.asList("砍猴儿", "打扫卫生")));    map.put("p2", new Person("韩吉·佐耶", 33, false, Arrays.asList("研究巨人", "讲故事")));    Gson gson = new Gson();    String mapJson = gson.toJson(map);    System.out.println(mapJson);    // {"p1":{"name":"利威尔·阿克曼","age":35,"isMale":true,"hobbies":["砍猴儿","打扫卫生"]},"p2":{"name":"韩吉·佐耶","age":33,"isMale":false,"hobbies":["研究巨人","讲故事"]}}    Map<String, Person> jsonMap = gson.fromJson(mapJson, new TypeToken<Map<String, Person>>() { }.getType());    System.out.println(jsonMap);}

总的来说就是toJson()和fromJson两个方法

“Java中Json与List、Map、entity怎么互相转化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯