JSON转换常用类库

简介: JSON转换常用类库

JSON转换常用类库

本文主要包括以下几方面:

  1. jackson的使用
  2. fastjson的使用
  3. gson的使用

使用之前,先引入依赖

------------------jackson-------------------------------
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.1</version>
</dependency>
------------------fastjson-------------------------------
 <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.4</version>
</dependency>
------------------gson-------------------------------
<dependency>  
    <groupId>com.google.code.gson</groupId>  
    <artifactId>gson</artifactId>  
    <version>2.8.2</version>  
</dependency>  

一、jackson的使用

//实体类
public class Users {
    private String name;
    private Integer age;
    private Date birthday;
    private String email;
    ...
@Test
public void testJoinne2r() throws IOException{
    //JAVA对象转JSON[JSON序列化]
    Users user = new Users();
    user.setName("小民");
    user.setEmail("xiaomin@sina.com");
    user.setAge(20);
    System.out.println(objectMapper.writeValueAsString(user));
    //{"name":"小民","age":20,"birthday":null,"email":"xiaomin@sina.com"}
    //JSON转Java类[JSON反序列化]
    String jsonstr = objectMapper.writeValueAsString(user);
    Users u = objectMapper.readValue(jsonstr,Users.class);
    System.out.println(u.toString());
    //Users{name='小民', age=20, birthday=null, email='xiaomin@sina.com'}
}    

Jackson注解:

@JsonIgnore 用于属性上,表示忽略该属性。

@JsonFormat 用于属性上,把Date类型直接转化为想要的格式,如@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)。

@JsonProperty 用于属性上,相当于重命名,如把trueName属性序列化为name

二、fastjson的使用

//对象序列化
Map<String, Object> map = ImmutableMap.of("key1", "One","key2", "Two");
System.out.println(JSON.toJSONString(map));
//{"key1":"One","key2":"Two"}
//传入一个对象和一个布尔类型(是否格式化),将对象转成格式化后的JSON字符串。
JSON.toJSONString(map,true)
//反序列化对象
String jsonstr = JSON.toJSONString(map);
Map<String, Object> resultMap = JSONObject.parseObject(jsonstr ,Map.class);
System.out.println(resultMap);//{key1=One, key2=Two}
//日期格式化
String dateJson = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
System.out.println(dateJson);//"2021-06-29 15:28:55"
//集合的反序列化
List<Map<String,Object>> list = Lists.newArrayList();
Map<String, Object> map = ImmutableMap.of("key1", "One","key2", "Two");
list.add(map);
String jsonstr = JSON.toJSONString(list,true);
List<Map<String,Object>> result = JSONArray.parseObject(jsonstr ,List.class);
System.out.println(result);//[{"key1":"One","key2":"Two"}]

自定义一个fastjson转换工具类

public class MyJsonUtil {
    private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 输出空置字段
             SerializerFeature.WriteNullListAsEmpty,
            // // list字段如果为null,输出为[],而不是null
             SerializerFeature.WriteNullNumberAsZero,
             // 数值字段如果为null,输出为0,而不是null
             SerializerFeature.WriteNullBooleanAsFalse,
            // // Boolean字段如果为null,输出为false,而不是null
             SerializerFeature.WriteNullStringAsEmpty,
            // // 字符类型字段如果为null,输出为"",而不是null
            SerializerFeature.WriteDateUseDateFormat // 日期格式化yyyy-MM-dd
            // HH:mm:ss
    };
    public static String toJson(Object object) {
        return JSON.toJSONString(object, features);
    }
}

三、gson的使用

public class User {
    //省略其它
    public String name;
    public int age;
    public String emailAddress;
}
//生成JSON: 
Gson gson = new Gson();
User user = new User("张三",24);
String jsonObject = gson.toJson(user); // {"name":"张三kidou","age":24}
//解析JSON:
Gson gson = new Gson();
String jsonString = "{\"name\":\"张三\",\"age\":24}";
User user = gson.fromJson(jsonString, User.class);
//属性重命名 @SerializedName 注解的使用
@SerializedName("email_address")
public String emailAddress;


相关文章
使用ruoyi-vue控制数据权限
使用ruoyi-vue控制数据权限
1575 0
|
存储 网络协议 安全
阿里云服务器2核8G、4核16G、8核32G选型参考:经济型、通用算力型和通用型选择参考
2核8G、4核16G、8核32G配置是用户关注度比较高的热门配置,在阿里云服务器的实例规格中,这些配置一般有经济型e、通用算力型u1、通用型g7和通用型g8y等多种实例规格,虽然配置相同,但是这些实例规格之间的性能和价格差别是很大的,因此,我们有必要弄清楚他们之间的差别,这样才能根据自己的需求选择最适合自己的实例。本文将为您详细解析这些实例规格的性能、价格及应用场景,以供参考和选择。
阿里云服务器2核8G、4核16G、8核32G选型参考:经济型、通用算力型和通用型选择参考
|
11月前
|
弹性计算 应用服务中间件 定位技术
阿里云基于Anycast弹性公网IP实现多源站的就近访问加速
本文介绍了如何使用阿里云Anycast弹性公网IP实现基于地理位置的访问策略,通过在不同地区部署ECS服务器并绑定Anycast实例,实现就近加速访问。具体步骤包括创建ECS、创建Anycast实例、绑定资源和测试效果。
432 1
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
1141 0
|
SQL 监控 数据库
SQL Server 查询超时问题排查
【7月更文挑战第8天】排查 SQL Server 查询超时涉及五个主要方面:检查复杂查询、评估服务器性能、审视配置参数、更新统计信息和分析执行计划。关注点包括查询的结构(如连接、子查询和索引),服务器资源(CPU、内存、网络延迟),连接和内存设置,以及统计信息的时效性。通过这些步骤可定位并解决性能瓶颈。
476 0
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】47. Pytorch图片样式迁移实战:将一张图片样式迁移至另一张图片,创作自己喜欢风格的图片【含完整源码】
【从零开始学习深度学习】47. Pytorch图片样式迁移实战:将一张图片样式迁移至另一张图片,创作自己喜欢风格的图片【含完整源码】
|
缓存 Java 开发者
10个点介绍SpringBoot3工作流程与核心组件源码解析
Spring Boot 是Java开发中100%会使用到的框架,开发者不仅要熟练使用,对其中的核心源码也要了解,正所谓知其然知其所以然,V 哥建议小伙伴们在学习的过程中,一定要去研读一下源码,这有助于你在开发中游刃有余。欢迎一起交流学习心得,一起成长。
240 0
|
消息中间件 Kafka 数据处理
了解Kafka位移自动提交的秘密:避免常见陷阱的方法
了解Kafka位移自动提交的秘密:避免常见陷阱的方法
819 1
|
Ubuntu C++
Ubuntu20.04LTS+uhd3.15+gnuradio3.8.1源码编译及安装
Ubuntu20.04LTS+uhd3.15+gnuradio3.8.1源码编译及安装
637 0
IDA3.12版本的python,依旧报错IDAPython: error executing init.py.No module named ‘impRefer to the message win
IDA3.12版本的python,依旧报错IDAPython: error executing init.py.No module named ‘impRefer to the message win