Java中JSON字符串进行各种转换的方法小结

 更新时间:2024年01月28日 10:11:59   作者:不归SUN  
Gson和Hutool的JSONUtil都是常用的用于处理JSON数据的工具库,它们提供了简单易用的API来进行JSON字符串的解析、转换和操作,下面就跟随小编一起学习一下如果使用他们实现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字符串转换的资料请关注脚本之家其它相关文章!

相关文章

  • Java多线程通信wait()和notify()代码实例

    Java多线程通信wait()和notify()代码实例

    这篇文章主要介绍了Java多线程通信wait()和notify()代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java分布式流式处理组件Producer分区理论

    java分布式流式处理组件Producer分区理论

    这篇文章主要为大家介绍了java分布式流式处理组件Producer分区理论详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 详解Java函数式编程和lambda表达式

    详解Java函数式编程和lambda表达式

    这篇文章主要介绍了Java函数式编程和lambda表达式,对lambda感兴趣的同学,一定要看一下
    2021-04-04
  • Java代码中如何去掉烦人的“!=null”

    Java代码中如何去掉烦人的“!=null”

    这篇文章主要介绍了Java代码中去掉烦人的“!=null”,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 如何获取jar包resources文件路径

    如何获取jar包resources文件路径

    java项目发布到jar之后找不到文件路径,遇到这样问题如何处理呢,下面小编给大家分享获取jar包resources文件路径的解决方法,感兴趣的朋友一起看看吧
    2023-12-12
  • Java集合类之TreeSet的用法详解

    Java集合类之TreeSet的用法详解

    这篇文章主要为大家详细介绍了Java集合类中TreeSet的用法,文中的示例代码讲解详细,对我们学习Java有一定的帮助,感兴趣的可以了解一下
    2022-08-08
  • Spring中的AOP操作你了解吗

    Spring中的AOP操作你了解吗

    这篇文章主要为大家详细介绍了Spring中的AOP操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Java数组与堆栈相关知识总结

    Java数组与堆栈相关知识总结

    今天给大家带来的是关于Java的相关知识,文章围绕着Java数组与堆栈展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • springboot整合websocket最基础入门使用教程详解

    springboot整合websocket最基础入门使用教程详解

    这篇文章主要介绍了springboot整合websocket最基础入门使用教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Idea如何关闭或开启引用提示Usages和Annotations

    Idea如何关闭或开启引用提示Usages和Annotations

    这篇文章主要介绍了Idea如何关闭或开启引用提示Usages和Annotations问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论