Java Json 与 List、Map、entity 的相互转换
在开发中,Json转换的场景往往也就是那么几个。
1.将JavaBean转换为json,或将json字符串转换为JavaBean。
2.将List集合转换为json,或将json转换为List集合。
3.将Map集合转换为json,或将json转换为Map集合。
下面我们来看看如何使用
第一步:导入依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency>
第二步:开始使用
场景一:转换普通对象(Bean)。
1.将普通的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(); } }
2.使用Gson解析Person的实例。
1 先创建Person对象。
2 在创建Gson对象。
3 调用Gson的String toJson(Object)方法,来将对象转换为json字符串。
@Test public 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":["*","迫害莱纳"]} }
3.将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集合。
@Test public 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转换。
@Test public 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的互相转化的文章就介绍到这了,更多相关Java Json与List、Map、entity转化内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
下一篇: Java8 将列表转换为地图
推荐阅读
-
java 实现十六进制数与图片的相互转换
-
一种结构设计模式,允许在对象中动态添加新行为。它通过创建一个封装器来实现这一目的,即把对象放入一个装饰器类中,然后把这个装饰器类放入另一个装饰器类中,以此类推,形成一个封装器链。这样,我们就可以在不改变原始对象的情况下动态添加新行为或修改原始行为。 在 Java 中,实现装饰器设计模式的步骤如下: 定义一个接口或抽象类作为被装饰对象的基类。 公共接口 Component { void operation; } } 在本例中,我们定义了一个名为 Component 的接口,该接口包含一个名为 operation 的抽象方法,该方法定义了被装饰对象的基本行为。 定义一个实现基类方法的具体装饰对象。 公共类 ConcreteComponent 实现 Component { public class ConcreteComponent implements Component { @Override public void operation { System.out.println("ConcreteComponent is doing something...") ; } } 定义一个抽象装饰器类,该类继承于基类,并将装饰对象作为一个属性。 公共抽象类装饰器实现组件 { protected Component 组件 public Decorator(Component component) { this.component = component; } } @Override public void operation { component.operation; } } } 在这个示例中,我们定义了一个名为 Decorator 的抽象类,它继承了 Component 接口,并将被装饰对象作为一个属性。在操作方法中,我们调用了被装饰对象上的同名方法。 定义一个具体的装饰器类,继承自抽象装饰器类并实现增强逻辑。 公共类 ConcreteDecoratorA extends Decorator { public ConcreteDecoratorA(Component 组件) { super(component); } } public void operation { super.operation System.out.println("ConcreteDecoratorA 正在添加新行为......") ; } } 在本例中,我们定义了一个名为 ConcreteDecoratorA 的具体装饰器类,它继承自装饰器抽象类,并实现了操作方法的增强逻辑。在操作方法中,我们首先调用被装饰对象上的同名方法,然后添加新行为。 使用装饰器增强被装饰对象。 公共类 Main { public static void main(String args) { Component 组件 = new ConcreteComponent; component = new ConcreteDecoratorA(component); 组件操作 } } 在这个示例中,我们首先创建了一个被装饰对象 ConcreteComponent,然后通过 ConcreteDecoratorA 类创建了一个装饰器,并将被装饰对象作为参数传递。最后,调用装饰器的操作方法,实现对被装饰对象的增强。 使用场景 在 Java 中,装饰器模式被广泛使用,尤其是在 I/O 中。Java 中的 I/O 库使用装饰器模式实现了不同数据流之间的转换和增强。 让我们打开文件 a.txt,从中读取数据。InputStream 是一个抽象类,FileInputStream 是专门用于读取文件流的子类。BufferedInputStream 是一个支持缓存的数据读取类,可以提高数据读取的效率,具体代码如下: @Test public void testIO throws Exception { InputStream inputStream = new FileInputStream("C:/bbb/a.txt"); // 实现包装 inputStream = new BufferedInputStream(inputStream); byte bytes = new byte[1024]; int len; while((len = inputStream.read(bytes)) != -1){ System.out.println(new String(bytes, 0, len)); } } } } 其中 BufferedInputStream 对读取数据进行了增强。 这样看来,装饰器设计模式和代理模式似乎有点相似,接下来让我们讨论一下它们之间的区别。 第三,与代理模式的区别: 代理模式的目的是控制对对象的访问,它在对象外部提供一个代理对象来控制对原对象的访问。代理对象和原始对象通常实现相同的接口或继承相同的类,以确保两者可以相互替换。 装饰器模式的目的是动态增强对象的功能,而这是通过对象内部的包装器来实现的。在装饰器模式中,装饰器类和被装饰对象通常实现相同的接口或继承自相同的类,以确保两者可以相互替代。装饰器模式也被称为封装器模式。 在代理模式中,代理类附加了与原类无关的功能。
-
Java Json 与 List、Map、entity 的相互转换
-
如何在 Java 中将 Map 和 JSON 数据相互转换?
-
Java 将实现对象与 Map 的相互转换--使用 BeanMap
-
011-JSON、JSONObject、JSONArray 的使用,JSON 数组形式字符串转换为 List
-
在Java中轻松实现JSONObject和Json字符串之间的相互转换
-
在Java中,如何快速实现XML到JSON的转换? - 解析与生成指南:关键步骤包括解析XML、构造数据模型、转化为JSON。讲解如下:首先,利用JDOM库读懂XML文档,提取元素和属性;接着,基于这些信息设计适当的数据结构(如树形或网状结构);最终,运用Jackson库将数据结构顺利转存为JSON格式。同时,我们也讨论了何时选用JDOM和Jackson这类工具辅助转换过程。
-
在Java中轻松实现图片与二进制数据之间的相互转换