Java中JSON字符串进行各种转换的方法小结
Gson和Hutool的JSONUtil都是常用的用于处理JSON数据的工具库,它们提供了简单易用的API来进行JSON字符串的解析、转换和操作。下面对它们进行一些比较:
- 功能丰富程度: Gson相对来说是一个更全面的JSON处理库,提供了更多的功能和选项,例如支持自定义序列化和反序列化规则、处理复杂对象等。而Hutool的JSONUtil则是Hutool工具库中的一部分,相对较为简洁,提供了一些基本的JSON操作方法。
- 使用方式: Gson使用起来比较简单明了,只需创建Gson对象,并通过其提供的方法进行序列化和反序列化操作。而Hutool的JSONUtil也非常易用,可以直接调用其提供的方法进行JSON字符串的解析、转换和操作。
- 性能: 在性能方面,Gson通常比Hutool的JSONUtil稍微快一些。这是由于Gson在内部使用了很多高级的技术和优化策略来提高效率,但在大多数情况下,性能差异并不会对应用程序产生显著影响。
- 依赖和引入: Gson是Google开发的库,需要单独引入Gson的依赖包。而Hutool是一个Java工具库,JSONUtil是其中的一个模块,可以通过引入整个Hutool工具库来使用。
在使用选择方面,如果你需要更多高级的JSON操作和自定义功能,或者对性能有较高要求,那么可以选择使用Gson。而如果你只需要进行一些基本的JSON解析、转换和操作,并且希望使用一个轻量级的工具库,那么Hutool的JSONUtil是一个很好的选择。最终选择取决于你的具体需求和偏好。
1.GSON解析器
Gson 是一个开源的 Java 库,用于在 Java 对象和 JSON 数据之间进行序列化和反序列化操作。它可以将 Java 对象转换为 JSON 字符串,并将 JSON 字符串转换为 Java 对象。 可以将字符串转换为复杂的bean,
导入依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency>
准备需要转换成的实体类
@Data public class User{ private Integer id; private String name; private String sex; }
1.字符串转javaBean对象
String str="{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"}"; Gson gson = new Gson(); User user = gson.fromJson(str, User.class);
使用 gson.fromJson()
方法将 JSON 字符串 str
转换为 User 对象,并将结果存储在 user
变量中。
注意,User
类需要与 JSON 字符串中的键值对对应,即 name
属性对应 JSON 中的 "name"
键,age
属性对应 JSON 中的 "age"
键。
2.字符串转List
String strList="[{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"},{\"id\":2,\"name\":\"Bob\",\"sex\":\"男\"}]"; Gson gson = new Gson(); List<User> users = gson.fromJson(strList, new TypeToken<List<User>>() { }.getType());
此方法参数中的Type类型可以通过Gson包提供TypeToken<>类获取。这个类带有泛型,且这个泛型就是Json串转换成为对象后的类型(此处是List<User>)我们不需要重写这个类中的任何方法,只需要创建这个类的一个匿名内部类并调用getTpye()方法即可。
注意:需要转换的字符串strList,必须是list格式,以"["开头,"]"结尾。不然会报错:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
3.字符串转map
与转换为List步骤一样,注意:字符串需以"{"开头。
String strList="{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"}"; Gson gson = new Gson(); Map<String, Person> jsonMap = gson.fromJson(mapJson, new TypeToken<Map<String, Person>>() { }.getType());
4.Object转换为JSON字符串
String json = gson.toJson(Object);
使用 gson.toJson()
方法将 各种Java 对象转换成相应的 JSON 字符串。
2.JSONUtil解析
JSONUtil 是 Hutool 中用于处理 JSON 数据的工具类。
导入依赖
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-json</artifactId> <version>5.7.6</version> </dependency>
1.Object转换为JSON字符串
JSONUtil.toJsonStr可以将任意对象(Bean、Map、集合等)直接转换为JSON字符串。 如果对象是有序的Map等对象,则转换后的JSON字符串也是有序的。
String jsonStr = JSONUtil.toJsonStr(Object);
2.JSON字符串转换为map
首先使用 JSONUtil.parseObj()
方法将 JSON 字符串解析为一个 JSONObject 对象,然后使用 toBean()
方法将 JSONObject 对象转换为 HashMap 类型的 Java 对象。
String str="{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"}"; JSONObject jsonObject = JSONUtil.parseObj(str); HashMap map = jsonObject.toBean(HashMap.class);
3.JSON字符串转换为List
1.使用 JSONArray.parseArray() 方法将 JSON 字符串转换为 JSONArray 对象; 使用 JSONArray.toList() 方法将 JSONArray 对象转换为 List 对象
String jsonString = "[{\"id\": 1, \"name\": \"Alice\"}, {\"id\": 2, \"name\": \"Bob\"}]"; JSONArray jsonArray = JSONUtil.parseArray(jsonString); List<Map<String, Object>> list = CollectionUtil.toList(jsonArray, Map.class);
2.JSONUtil.toList()
方法需要传入两个参数:一个JsonArray,一个要转换的类型,这里new一个JsonArray
JSONArray jsonArray = new JSONArray(jsonList); List<Map> mapList = JSONUtil.toList(jsonArray, Map.class);
3.总结
1.GSON
Object转换为json字符串:gson.toJson(Object)
json字符串转Object: gson.fromJson(strList, new TypeToken<>() { }.getType());
2.JSONUtil
Object转换为json字符串:JSONUtil.toJsonStr(Object)
json字符串转map:
HashMap<String,Integer> hashMap = JSONUtil.parseObj(jsonMap).toBean(HashMap.class);
json字符串转list:
JSONArray jsonArray = new JSONArray(objListJson); List users = JSONUtil.toList(jsonArray, User.class);
或者:
JSONArray jsonArray = JSONUtil.parseArray(jsonString); List list = CollectionUtil.toList(jsonArray, User.class);
以上就是Java中JSON字符串进行各种转换的方法小结的详细内容,更多关于Java JSON字符串转换的资料请关注脚本之家其它相关文章!
相关文章
springboot整合websocket最基础入门使用教程详解
这篇文章主要介绍了springboot整合websocket最基础入门使用教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-03-03Idea如何关闭或开启引用提示Usages和Annotations
这篇文章主要介绍了Idea如何关闭或开启引用提示Usages和Annotations问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01
最新评论