JSON字符串转换为Java对象

json字符串转换为Java对象

在后台开发的过程中,经常使用 json 作为数据传输的格式;为了方便开发,通常会将 json 转化为对象,那么如何将 json 转化为 java 对象呢?

以如下 json 字符串为例:

{
	"status":
		{
			"code":0,
			"msg":"成功"
		},
	"result":
		{
			"pendingCount":"3",
			"groupList":
				[
					{"flag":"master","pending":"2","group":"fmq1"},
					{"flag":"master","pending":"0","group":"fmq2"},
					{"flag":"master","pending":"1","group":"fmq3"},
					{"flag":"master","pending":"0","group":"fmq4"}
				]
		}
}
首先根据 json 定义对应的类

1.定义一个封装整个返回值的类

public class ResultDTO<T> {

    private StatusDTO status;
    private T result;

    @Override
    public String toString(){
        return "status:{" + status.toString() + "}" +
                ",result:" + result.toString() ;

    }
}

2.定义封装了 status 的类

public class StatusDTO {

    private Integer code;
    private String msg;

    @Override
    public String toString(){
        return "code:" + code +
                ",msg:" + msg;
    }

3.定义封装了 result 的类

在实际的开发过程中,返回的 result 根据不同的接口函数,通常有很多种类,我们可以为每个接口的 result 定义一个对象,对上面 json 中的 result,我们定义了一个 PendingDTO 对象:

public class PendingDTO {
    
    private Integer pendingCount;
    private List<GroupDTO> groupList;
    
	@Override
    public String toString(){
        String gl = "";
        if(groupList != null){
            for(GroupDTO g:groupList){
                gl+=g.toString() + ",";
            }
        }
        return "pendingCount:" + pendingCount +
                ",groupList:{" + gl +
                "}";
    }
}
public class GroupDTO {
    private String flag;
    private Integer pending;
    private String group;
    
	@Override
    public String toString(){
        return "flag:" + flag +
                ",pending:" + pending +
                ",group:" + group;
    }
}
转换

使用 FastJson 进行转换

ResultDTO<JSON> resultDTO = JSONObject.parseObject(json, ResultDTO.class);
PendingDTO pendingDTO = JSONObject.toJavaObject(resultDTO.getResult(), PendingDTO.class);
JSON官方的解析
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

JSONObject jsonObject = JSONObject.fromObject(json);
JSONObject object = jsonObject.getJSONObject("status");
Integer code = object.getInteger("code");
String msg = object.getString("msg");

遇到的问题
net.sf.json.JSONObject 包不能处理字符串为 null 的情况,会报空指针的错误;
换成com.alibaba.fastjson.JSONObject包就好了。

fastjson 被提出有安全漏洞不能使用

试过了 gson 等一系列 json 包,大多数都无法处理空值的情况,最后jackson 成功解析,代码如下

ObjectMapper mapper = new ObjectMapper();
PendingDTO pendingDTO = mapper.readValue(json,PendingDTO.class);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值