fasterxml.jackson.
2017-08-27 00:25
387 查看
Jackson是Java中众多json处理工具的一个,比起常见的Json-lib,Gson要快一些。
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
第一步 准备工具类
1.CommonUtil类负责new mapper
具体如下:
/**********************CommonUtil类*****************************************/
private static ObjectMapper mapper;
public static synchronized ObjectMapper getMapperInstance(boolean createNew) {
if (createNew) {
return new ObjectMapper();
} else if (mapper == null) {
mapper = new ObjectMapper();
}
return mapper;
}
/**********************CommonUtil类*****************************************/
第二步 你的实体类 举例子说明
/**********************Entity类*****************************************/
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Person other = (Person) obj;
if (age != other.age) {
return false;
}
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name)) {
return false;
}
return true;
}
}
/**********************Entity类*****************************************/
/**********************带集合Entity类*****************************************/
public class TestVo {
private String voName;
private List<Person> pers;
public TestVo() {
}
public TestVo(String voName, List<Person> pers) {
super();
this.voName = voName;
this.pers = pers;
}
public String getVoName() {
return voName;
}
public void setVoName(String voName) {
this.voName = voName;
}
public List<Person> getPers() {
return pers;
}
public void setPers(List<Person> pers) {
this.pers = pers;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
TestVo other = (TestVo) obj;
if (pers == null) {
if (other.pers != null) {
return false;
}
} else if (pers.size() != other.pers.size()) {
return false;
} else {
for (int i = 0; i < pers.size(); i++) {
if (!pers.get(i).equals(other.pers.get(i))) {
return false;
}
}
}
if (voName == null) {
if (other.voName != null) {
return false;
}
} else if (!voName.equals(other.voName)) {
return false;
}
return true;
}
}
/**********************带集合Entity类*****************************************/
/**********************Bean2Json类*****************************************/
public static String beanToJson(Object obj) throws IOException {
ObjectMapper mapper = CommonUtil.getMapperInstance(false);
StringWriter writer = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(writer);
mapper.writeValue(gen, obj);
gen.close();
String json = writer.toString();
writer.close();
return json;
}
/**********************Bean2Json类*****************************************/
/**********************Json2Bean类*****************************************/
public static Object jsonToBean(String json, Class<?> cls) throws Exception {
Object vo = mapper.readValue(json, cls);
return vo;
}
/**********************Json2Bean类*****************************************/
测试一下吧:
public static void main(String[] args) throws Exception {
// 准备数据
List<Person> pers = new ArrayList<Person>();
Person p = new Person("张三", 46);
pers.add(p);
p = new Person("李四", 19);
pers.add(p);
p = new Person("王二麻子", 23);
pers.add(p);
TestVo vo = new TestVo("一个容器而已", pers);
// 实体转JSON字符串
String json = beanToJson(vo);
System.out.println("Bean>>>Json----" + json);
// 字符串转实体
TestVo vo2 = (TestVo)jsonToBean(json, TestVo.class);
System.out.println("Json>>Bean--与开始的对象是否相等:" + vo2.equals(vo));
}
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
第一步 准备工具类
1.CommonUtil类负责new mapper
具体如下:
/**********************CommonUtil类*****************************************/
private static ObjectMapper mapper;
public static synchronized ObjectMapper getMapperInstance(boolean createNew) {
if (createNew) {
return new ObjectMapper();
} else if (mapper == null) {
mapper = new ObjectMapper();
}
return mapper;
}
/**********************CommonUtil类*****************************************/
第二步 你的实体类 举例子说明
/**********************Entity类*****************************************/
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Person other = (Person) obj;
if (age != other.age) {
return false;
}
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name)) {
return false;
}
return true;
}
}
/**********************Entity类*****************************************/
/**********************带集合Entity类*****************************************/
public class TestVo {
private String voName;
private List<Person> pers;
public TestVo() {
}
public TestVo(String voName, List<Person> pers) {
super();
this.voName = voName;
this.pers = pers;
}
public String getVoName() {
return voName;
}
public void setVoName(String voName) {
this.voName = voName;
}
public List<Person> getPers() {
return pers;
}
public void setPers(List<Person> pers) {
this.pers = pers;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
TestVo other = (TestVo) obj;
if (pers == null) {
if (other.pers != null) {
return false;
}
} else if (pers.size() != other.pers.size()) {
return false;
} else {
for (int i = 0; i < pers.size(); i++) {
if (!pers.get(i).equals(other.pers.get(i))) {
return false;
}
}
}
if (voName == null) {
if (other.voName != null) {
return false;
}
} else if (!voName.equals(other.voName)) {
return false;
}
return true;
}
}
/**********************带集合Entity类*****************************************/
/**********************Bean2Json类*****************************************/
public static String beanToJson(Object obj) throws IOException {
ObjectMapper mapper = CommonUtil.getMapperInstance(false);
StringWriter writer = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(writer);
mapper.writeValue(gen, obj);
gen.close();
String json = writer.toString();
writer.close();
return json;
}
/**********************Bean2Json类*****************************************/
/**********************Json2Bean类*****************************************/
public static Object jsonToBean(String json, Class<?> cls) throws Exception {
Object vo = mapper.readValue(json, cls);
return vo;
}
/**********************Json2Bean类*****************************************/
测试一下吧:
public static void main(String[] args) throws Exception {
// 准备数据
List<Person> pers = new ArrayList<Person>();
Person p = new Person("张三", 46);
pers.add(p);
p = new Person("李四", 19);
pers.add(p);
p = new Person("王二麻子", 23);
pers.add(p);
TestVo vo = new TestVo("一个容器而已", pers);
// 实体转JSON字符串
String json = beanToJson(vo);
System.out.println("Bean>>>Json----" + json);
// 字符串转实体
TestVo vo2 = (TestVo)jsonToBean(json, TestVo.class);
System.out.println("Json>>Bean--与开始的对象是否相等:" + vo2.equals(vo));
}
相关文章推荐
- NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer
- at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:536)
- Elasticsearch5.5.1提示:java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/filter/TokenFilter
- com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ExceptionId"
- java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectWriter.forType
- java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:54
- java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
- nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/DefaultIndenter
- Jackson反序列化错误:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field的解决方法
- java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
- java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
- java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
- jackson json转实体 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
- springMVC出现com/fasterxml/jackson/core/JsonProcessingException
- Class com.fasterxml.jackson.databind.ser.BasicSerializerFactory can not access a member of class com
- java.lang.NoClasjava.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException异常
- java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException
- 【jackson 异常】com.fasterxml.jackson.databind.JsonMappingException异常处理
- Jackson fasterxml和codehaus的区别 (fasterxml vs. codehaus)