JSON.toJSONString()方法在Java中的使用方法及应用场景

 更新时间:2024年04月27日 11:32:25   作者:李少兄  
这篇文章主要给大家介绍了关于JSON.toJSONString()方法在Java中的使用方法及应用场景,JSON.toJSONString是将对象转化为Json字符串,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式被广泛应用于前后端交互以及数据存储场景。阿里巴巴开源的fastjson库提供了一个简单易用且高效的JSON处理方式,其中com.alibaba.fastjson.JSON.toJSONString()方法用于将Java对象转换为JSON字符串,本文将详细解读其用法及应用场景。

一、引入依赖

首先,确保你的项目已经引入了Fastjson库,Maven配置如下:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

二、JSON.toJSONString()方法详解

JSON.toJSONString()方法的主要功能是将Java对象转换成JSON字符串格式。基本语法如下:

import com.alibaba.fastjson.JSON;

// 假设有一个User对象
public class User {
    private String name;
    private int age;

    // 省略getter和setter方法...
}

// 创建一个User对象实例
User user = new User();
user.setName("Tom");
user.setAge(25);

// 使用JSON.toJSONString()方法转换为JSON字符串
String jsonString = JSON.toJSONString(user);

上述代码执行后,jsonString变量将保存如下的JSON字符串:

{
    "name": "Tom",
    "age": 25
}

此方法支持序列化大部分Java类型,包括基础类型、集合、数组、Map以及自定义对象等。

三、高级用法

  • 序列化时排除某些字段

    如果不想将对象的某个属性转化为JSON字符串,可以通过@JSONField(serialize=false)注解来标记。

    public class User {
        @JSONField(serialize=false)
        private String password; // 不序列化密码字段
        
        // 其他字段和方法...
    }
    
  • 日期格式化

    默认情况下,fastjson会将Java.util.Date对象转为时间戳。如果你需要特定的日期格式,可以在调用toJSONString()方法时传入SerializerFeature.WriteDateUseDateFormat参数,并设置全局日期格式。

    FastJsonConfig config = new FastJsonConfig();
    config.setDateFormat("yyyy-MM-dd HH:mm:ss");
    
    String jsonString = JSON.toJSONString(user, config.getFeatures());
    
  • 防止XSS攻击

    fastjson提供了一个特性可以自动过滤HTML标签,防止XSS攻击,通过SerializerFeature.HtmlEscape参数开启。

    List<SerializerFeature> features = new ArrayList<>();
    features.add(SerializerFeature.HtmlEscape);
    
    String jsonString = JSON.toJSONString(user, features.toArray(new SerializerFeature[0]));
    

结语

JSON.toJSONString()方法是Java开发中进行JSON序列化的常用手段,借助fastjson库提供的丰富功能,我们可以轻松地处理各种复杂对象到JSON字符串的转换,从而满足前后端数据交互的需求。同时,注意在实际开发过程中根据业务需求选择合适的序列化策略,保证数据安全性和有效性。

补充:JSON.toJSONString()空字段不忽略修改

使用JSON.toJSONString(object)方法,返回的json中,null对应的key已经被过滤掉,这是因为默认会将为空的字段自动忽略,这明显不是我们想要的结果。 去掉JSON.toJSONString()空字段忽略方法两个如下

  • 方法一

SerializerFeature序列化属性

String s = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);

QuoteFieldNames———-输出key时是否使用双引号,默认为true

WriteMapNullValue——–是否输出值为null的字段,默认为false

WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null

WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null

WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null

WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非nul

  • 方法二

加上这个过滤器后,所有的null和"“串都会被转换成”"值输出到字符串中

    private static ValueFilter valueFilter = (o, s, o1) -> o1 == null ? "" : o1;

    public static void main(String[] args) {
        User user = new User();
        String s = JSON.toJSONString(user, valueFilter);
        System.out.println(s);
    }
  • 测试代码如下
    private static ValueFilter valueFilter = (o, s, o1) -> o1 == null ? "" : o1;

    public static void main(String[] args) {
        User user = new User();
        String s1 = JSON.toJSONString(user);
        System.out.println(s1);
        String s2 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
        System.out.println(s2);
        String s3 = JSON.toJSONString(user, valueFilter);
        System.out.println(s3);

    }
  • 测试结果如下

总结

到此这篇关于JSON.toJSONString()方法在Java中的使用方法及应用场景的文章就介绍到这了,更多相关Java中JSON.toJSONString()方法使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java超细致讲解数组的使用

    Java超细致讲解数组的使用

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素
    2022-05-05
  • 详解Java线程池是如何重复利用空闲线程的

    详解Java线程池是如何重复利用空闲线程的

    在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,此时,我们很自然会想到使用线程池来解决这个问题,文中给大家提到使用线程池的好处,对Java线程池空闲线程知识感兴趣的朋友一起看看吧
    2021-06-06
  • 关于自定义过滤器获取不到session问题

    关于自定义过滤器获取不到session问题

    这篇文章主要介绍了关于自定义过滤器获取不到session问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java并发编程之阻塞队列(BlockingQueue)详解

    Java并发编程之阻塞队列(BlockingQueue)详解

    这篇文章主要介绍了详解Java阻塞队列(BlockingQueue)的实现原理,阻塞队列是Java util.concurrent包下重要的数据结构,有兴趣的可以了解一下
    2021-09-09
  • 使用Hutool编写生成随机数的工具类

    使用Hutool编写生成随机数的工具类

    Hutool 是一个 Java 工具类库,提供了丰富的工具方法,其中 RandomUtil 是 Hutool 中用于生成随机数的工具类,下面我们来看看它的具体使用吧
    2025-02-02
  • SpringMVC Json自定义序列化和反序列化的操作方法

    SpringMVC Json自定义序列化和反序列化的操作方法

    这篇文章主要介绍了SpringMVC Json自定义序列化和反序列化的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java两个List<T> 求交集,差集,并集,去重后的并集

    Java两个List<T> 求交集,差集,并集,去重后的并集

    本文主要介绍了Java两个List<T> 求交集,差集,并集,去重后的并集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • SpringBoot实现MapperScan添加动态配置(占位符)

    SpringBoot实现MapperScan添加动态配置(占位符)

    这篇文章主要介绍了SpringBoot实现MapperScan添加动态配置(占位符),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • SpringBoot 整合Thymeleaf教程及使用方法

    SpringBoot 整合Thymeleaf教程及使用方法

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎,它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成,这篇文章主要介绍了SpringBoot 整合Thymeleaf教程及使用,需要的朋友可以参考下
    2023-11-11
  • Java线程池中的工作线程Worker类源码解析

    Java线程池中的工作线程Worker类源码解析

    这篇文章主要介绍了Java线程池中的工作线程Worker类源码解析,线程池中的工作线程是通过内部类Worker表示的,Worker继承自AbstractQueueSynchronizer,可以实现同步器的功能,需要的朋友可以参考下
    2023-12-12

最新评论