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)]
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。