Java中对象和JSON如何互相转换呢?
									
下文笔者讲述使用java代码对对象和JSON之间互相转换的方法分享,如下所示
				 
				JSON和对象的互相转换的实现思路
实现思路:
    使用jackson中的json工具类
	即可实现JSON和对象之间的互相转换
JSON常见格式说明
JSON数据格式分为:
    1.对象
	    {"name":"猫猫","address":"深圳","age":18}//对象格式的字符串
	  对应java中的对象
	2.数组
	   [{"name":"猫猫","address":"深圳","age":18}]//数组格式的字符串
	   对应java中的list<Entity>
JSON工具类创建
引入maven依赖<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.12</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.12</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided</scope> </dependency>
编写工具类
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.type.JavaType;
import java.io.IOException;
import java.util.List;
public class JsonUtils {
    private static final Logger LOG = Logger.getLogger(JsonUtils.class);
    // 定义jackson对象,用于 Java 对象的序列化及反序列化
    private static final ObjectMapper MAPPER = new ObjectMapper();
    static {
        //设置实体无属性和json串属性对应时不会出错,只转换对应的属性
        MAPPER.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
        //忽略值为null的属性
        MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }
    /**
     * 将对象转换成json字符串。
     * <p>Title: pojoToJson</p>
     * <p>Description: </p>
     *
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
        try {
            return MAPPER.writeValueAsString(data);
        } catch (JsonMappingException e) {
            LOG.error(e);
        } catch (IOException e) {
            LOG.error(e);
        }
        return null;
    }
    /**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param beanType 对象中的object类型,<T> 将此方法声明为泛型方法,可传入任何对象
     * @return <T> 目标对象
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        if (StringUtils.isBlank(jsonData) || null == beanType) {
            return null;
        }
        try {
            return MAPPER.readValue(jsonData, beanType);
        } catch (Exception e) {
            LOG.error("json字符串转对象失败,json = {},clazz = {}", jsonData, beanType, e);
        }
        return null;
    }
    /**
     * 将json数据转换成pojo对象list
     * <p>Title: jsonToList</p>
     * <p>Description: </p>
     *
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        if (StringUtils.isBlank(jsonData) || null == beanType) {
            return null;
        }
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            return MAPPER.readValue(jsonData, javaType);
        } catch (Exception e) {
            LOG.error("json字符串转List失败,json = {},clazz = {}", jsonData, beanType, e);
        }
        return null;
    }
}
例 
定义实体User
 
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
@Getter
@Setter
@ToString
public class Student implements Serializable {
   private static final long serialVersionUID = -5246589941647210011L;
    //姓名
    private String name;
    //年龄
    private String age;
    //住址
    private String address;
   private Date day;
}
编写测试代码
import org.apache.log4j.Logger; import java.util.ArrayList; import java.util.Date; import java.util.List; public class JsonTest { private static final Logger LOG = Logger.getLogger(JsonTest.class); public static void convertObject() { Student stu=new Student(); stu.setName("猫猫"); stu.setAge("18"); stu.setDay(new Date()); stu.setAddress("深圳"); //1、使用JSONObject String jsonStr = JsonUtils.objectToJson(stu); LOG.info("----- jsonStr = " + jsonStr); //2、使用JSONArray Student stuPojo = JsonUtils.jsonToPojo(jsonStr, Student.class); LOG.info("stuPojo:" + stuPojo.toString()); List<Student> studentList = new ArrayList<>(); studentList.add(stu); String arrayStr="[{\"name\":\"猫猫\",\"age\":\"18\",\"address\":\"深圳\",\"addressTest\":\"无对应属性,不转换\"}]"; List<Student> students = JsonUtils.jsonToList(arrayStr, Student.class); LOG.info("addressTest无对应属性,不转换。----- students = " + students); } public static void main(String[] args) { convertObject(); } } -----运行以上代码,将输出以下信息----- - ----- jsonStr = {"name":"猫猫","age":"18","address":"深圳","day":***} - stuPojo:Student(name=猫猫, age=18, address=深圳, day=**) - addressTest无对应属性,不转换。----- students = [Student(name=猫猫, age=18, address=深圳, day=null)]
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

			
               
               
               
               
          
