java对象与json对象间的相互转换(jackson和fastjson)

使用jackson

首先添加jackson依赖

<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>最新版本</version>
    <!--<version>1.9.12</version>-->
</dependency>

新建工具类(所有转换方法都写在这个类中)

package com.mmall.util;

import com.mmall.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize.*;
import org.codehaus.jackson.type.JavaType;
import org.codehaus.jackson.type.TypeReference;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Author: LailaiMonkey
 * @Description:
 * @Date: Created in 10:21 2019/1/24
 */
@Slf4j
public class JsonUtil {

    private static ObjectMapper objectMapper=new ObjectMapper();
    static {
        //对象所有字段全部列入
        objectMapper.setSerializationInclusion(Inclusion.ALWAYS);
        //取消默认转换timestamps形式,否则日期时间是以时间戳形式显示
        objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);
        //忽略空bean转换json错误
        objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);
        objectMapper.setDateFormat(new SimpleDateFormat(DateTimeUtil.STANDARD_FORMAT));
        //忽略 在Json字符串中存在,但是在Java对象中不存在对应属性的情况。防止错误
        objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
    }

	/**
     * 实体对象转换Json
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String objToString(T obj){
        if (obj==null){
            return null;
        }
        try {
            return obj instanceof String ? (String) obj:objectMapper.writeValueAsString(obj);
        } catch (Exception e) {
            log.warn("Parse object to String error",e);
            return null;
        }
    }

	/**
     * 实体对象转换Json,得到结果有换行符,分行显示
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String objToStringPretty(T obj){
        if (obj==null){
            return null;
        }
        try {
            return obj instanceof String ? (String) obj:objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
        } catch (Exception e) {
            log.warn("Parse object to String error",e);
            return null;
        }
    }

	/**
     * Json字符转实体对象
     * @param str
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T stringToObj(String str,Class<T> clazz){
        if (StringUtils.isEmpty(str)||clazz==null){
            return null;
        }
        try {
            return clazz.equals(String.class) ? (T) str:objectMapper.readValue(str,clazz);
        }catch (Exception e){
            log.warn("Parse object to String error",e);
            return null;
        }
    }

  	 /**
     * Json字符串转换List集合
     * @param jsonData
     * @param beanType
     * @param <T>
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType){
        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, new Class[]{beanType});
        try {
            return (List)objectMapper.readValue(jsonData, javaType);
        } catch (Exception e) {
            log.warn("Parse object to String error",e);
            return null;
        }
   	 }
  }

   public static void main(String[] args) {
        User user=new User();
        user.setId(2);
        user.setEmail("8888@888.com");
        user.setCreateTime(new Date());
        String s = JsonUtil.obj25tring(user);
        String s1 = JsonUtil.obj25tringPretty(user);
        User user1 = JsonUtil.string2Obj(s, User.class);
        //因为需要转换是List所有json也是集合,所以最外面是【】
        String b="["+s+"]";
        List<User> users = JsonUtil.jsonToList(b, User.class);
    }
}

实体类
待转换Json串字段和实体字段相对应可直接转换,如果待转换Json串的字段为“Id”,实体字段为“id”,可以修改实体字段名称保持一致,也可以使用@JsonProperty(“Id”)注释

public class User {
	@JsonProperty("Id")
    private Integer id;
    
    private String email;
    @JsonProperty("createtime")
    private Date createTime;
    //get、set方法省略
}

配置参数说明

  • Inclusion.ALWAYS 对象中所有字段全部转换
  • Inclusion.NON_NULL对象中只转换非空字段
  • Inclusion.NON_DEFAULT如果对象中字段设置默认值,默认值改变则转换,默认什不改变不转换。默认值初值为Null
  • Inclusion.NON_EMPTY对象中字段值为Null或空串,同StringUtils.isEmpty判断方法一样

使用fastjson

简介

  • Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
  • Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。

特性

  • 提供服务器端、安卓客户端两种解析工具,性能表现较好。
  • 提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString方 法即可将对象转换成 JSON 字符串,parseObject 方法则反过来将 JSON 字符串转换成对象。
  • 允许转换预先存在的无法修改的对象(只有class、无源代码)。
  • Java泛型的广泛支持。
  • 允许对象的自定义表示、允许自定义序列化类。
  • 支持任意复杂对象(具有深厚的继承层次和广泛使用的泛型类型)。

添加依赖

	<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>最新版本</version>
            <!--<version>1.2.55</version>-->
    </dependency>

方法说明

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text)// 把JSON文本parse成JSONObject    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。

方法调用

	public static void main(String[] args) {
        User user=new User();
        user.setId(2);
        user.setEmail("8888@888.com");
        user.setCreateTime(new Date());
        String s = JSON.toJSONString(user);
        User user1 = JSON.parseObject(s, User.class);
        //因为需要转换是List所有json也是集合,所以最外面是【】
        String b="["+s+"]";
        List<User> users = JSON.parseArray(b, User.class);
    }

实体类
代码同上实体类代码。
待转换Json串字段和实体字段相对应可直接转换,如果待转换Json串的字段为“Id”,实体字段为“id”,可以修改实体字段名称保持一致,也可以使用@JSONField(name="Id")注释

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值