Json字符串转实体工具类

介绍

在开发中,我们经常会用到JSON对象,而为了数据传输方便,我们还经常会使用JSONString,那么如果我们得到了一个JSONString,并且知道它对应一个实体类,如何将JSONString转为实体类呢?

使用FastJSON

利用FastJSON的parseObject方法,核心代码

/***
 * 将JSON文本反序列化到对象
 */
public static <T> T toBean(String jsonString, Class<T> bean) {
    T t = (T) JSON.parseObject(jsonString, bean); // fastjson
    return t;
}

测试代码

package com.example.json.test;

import com.alibaba.fastjson.JSON;
import com.example.json.dto.User;
import com.example.json.util.JSONUtil;

public class TestFunction {

    public static void main(String[] args) {
        //声明对象
        User user = new User();
        user.setId("111");
        user.setUsername("tom");
//        user.setPassword("abc");

        //将对象转成JSONString
        String userString = JSON.toJSONString(user);
        System.out.println(userString);

        //将JSONString转成对象
        User userEntity = JSONUtil.toBean(userString, User.class);
        System.out.println(userEntity);

    }

}

工具类

package com.example.json.util;

import com.alibaba.fastjson.JSON;

public class JSONUtil {

    /***
     * 将JSON文本反序列化到对象
     */
    public static <T> T toBean(String jsonString, Class<T> bean) {
        T t = (T) JSON.parseObject(jsonString, bean); // fastjson
        return t;
    }

}

实体

package com.example.json.dto;

import lombok.Data;

@Data
public class User {

    private String id;

    private String username;

    private String password;

}

pom依赖

<!--fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.69</version>
</dependency>

结果

在这里插入图片描述

我们注意到,即使不给password赋值,转换时也是没有问题的,没有的就赋值null或默认值

另一场景

但是我们想一想,如果我们传的JSONString和实体不对应,如JSONString对应的是UserAdd实体,但是转换时我们想转成User实体,可不可以呢?(事实上,这种场景在实际开发中是十分常见的)

我们来结合代码看一下吧

我们声明一个新的实体UserAdd,实体的部分字段和User一致

package com.example.json.dto;

import lombok.Data;

@Data
public class UserAdd {

    private String id;

    private String username;

    private String passwors;

    private String sex;

}

假设现在我们接收到的JSONString是UserAdd的,但我们仍将它转成User实体,会发生什么呢?

	...
	UserAdd userAdd = new UserAdd();
	userAdd.setId("111");
	userAdd.setUsername("tom");
	userAdd.setPasswors("abc");
	userAdd.setSex("f");
	
	//将对象转成JSONString
	String userString = JSON.toJSONString(userAdd);
	System.out.println(userString);
	
	//将JSONString转成对象
    User userEntity = JSONUtil.toBean(userString, User.class);
    System.out.println(userEntity);
    ...

结果

在这里插入图片描述

总结

我们会发现,它只将相同属性的部分赋值了,不同属性的部分,如果User中没有该字段,就不处理,如果User中有的字段就赋默认值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BirdMan98

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值