Jackson处理json,xml,csv
可以方便地实现序列化和反序列化,实现三者互转以及java bean互转
maven依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-csv</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.codehaus.woodstox</groupId> <artifactId>woodstox-core-asl</artifactId> <version>4.4.1</version> </dependency>
Xml工具类
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.dataformat.xml.XmlMapper; public class XmlUtil { private static final Logger logger = LogManager.getLogger(XmlUtil.class); private static final XmlMapper xmlMapper = new XmlMapper(); private XmlUtil() { } /** * 输出全部属性 如果xml中存在,对象中没有,则自动忽略该属性 失败返回null * * @param xmlContent * @param clazz * @return */ public static <T> T toNormalObject(String xmlContent, Class<T> clazz) { return xmlToObject(xmlContent, clazz); } /** * 输出全部属性 * 如果xml中存在,对象中没有,则自动忽略该属性 * 失败返回null * @param inputStream * @param clazz * @return */ public static <T> T toNormalObject(byte[] bytes, Class<T> clazz) { return xmlToObject(bytes, clazz); } /** * 输出全部属性 失败返回"" * * @param object * @return */ public synchronized static byte[] toNormalXml(Object object) { return objectToXml(Include.ALWAYS, object); } private static <T> T xmlToObject(byte[] bytes, Class<T> clazz) { try { return xmlMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).readValue(bytes, clazz); } catch (Exception e) { logger.info("XmlToObject failed:", e); } return null; } private static <T> T xmlToObject(String xmlContent, Class<T> clazz) { try { return xmlMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).readValue(xmlContent, clazz); } catch (Exception e) { logger.info("XmlToObject failed:", e); } return null; } private static <T> byte[] objectToXml(Include include, T object) { try { return xmlMapper.setSerializationInclusion(include).writerWithDefaultPrettyPrinter().writeValueAsBytes(object); } catch (JsonProcessingException e) { logger.info("ObjToXml failed:", e); } return null; } }
Csv工具类
import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.MappingIterator; import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson.dataformat.csv.CsvSchema; public class CsvUtil { private static final Logger logger = LogManager.getLogger(CsvUtil.class); private static final CsvMapper csvMapper = new CsvMapper(); private CsvUtil(){ } /** * 输出全部属性 * 如果csv中存在,对象中没有,则自动忽略该属性 * 失败返回null * * @param csvContent * @param clazz * @return */ public static <T> List<T> toNormalObject(String csvContent, Class<T> clazz) { try { CsvSchema schema = CsvSchema.emptySchema().withHeader(); MappingIterator<T> mappingIterator = csvMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).readerFor(clazz).with(schema).readValues(csvContent); return mappingIterator.readAll(); } catch (Exception e) { logger.info("CsvToObject failed:", e); } return null; } /** * 输出全部属性 * 如果csv中存在,对象中没有,则自动忽略该属性 * 失败返回null * @param inputStream * @param clazz * @return */ public synchronized static <T> List<T> toNormalObject(byte[] bytes, Class<T> clazz) { try { CsvSchema schema = CsvSchema.emptySchema().withHeader(); MappingIterator<T> mappingIterator = csvMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).readerFor(clazz).with(schema).readValues(bytes); return mappingIterator.readAll(); } catch (Exception e) { logger.info("CsvToObject failed:", e); } return null; } /** * 输出全部属性 失败返回"" * * @param object * @return */ public static String toNormalCsv(Object object) { return objectToCsv(Include.ALWAYS, object); } private static <T> String objectToCsv(Include include, T object) { try { CsvSchema csvSchema = csvMapper.schemaFor(object.getClass()); return csvMapper.setSerializationInclusion(include).writer(csvSchema).writeValueAsString(object); } catch (JsonProcessingException e) { logger.info("ObjToCsv failed:", e); } return ""; } }
Json工具类
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; public class JsonUtil { private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class); private static ObjectMapper objectMapper = new ObjectMapper(); /** * 输出全部属性 * 失败返回"" * @param object * @return */ public static String toNormalJson(Object object) { return toJson(Include.ALWAYS, object); } /** * 输出非空属性 * 失败返回"" * @param object * @return */ public static String toNonNullJson(Object object) { return toJson(Include.NON_NULL, object); } /** * 输出非Null且非Empty(如List.isEmpty)的属性 * 失败返回"" * @param object * @return */ public static String toNonEmptyJson(Object object) { return toJson(Include.NON_EMPTY, object); } /** * 转成Json * @param include * @param object * @return */ private static String toJson(Include include, Object object) { try { objectMapper.setSerializationInclusion(include); return objectMapper.writeValueAsString(object); } catch (Exception e) { logger.info("Obj转Json报错:", e); } return ""; } /** * 输出全部属性 * 如果json中存在,对象中没有,则自动忽略该属性 * 失败返回null * * @param json * @param clazz * @return */ public static <T> T toNormalObject(String json, Class<T> clazz) { return toObject(json, clazz); } /** * 转成Object * @param include * @param json * @param clazz * @return */ private static <T> T toObject(String json, Class<T> clazz) { try { objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); return objectMapper.readValue(json, clazz); } catch (Exception e) { logger.info("Json转Obj报错:", e); } return null; } }
Java bean实体类(get set省略)
csv使用@JsonProperty来注解csv文件的列名
xml使用@JacksonXmlProperty来注解xml的属性
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; public class CsvItem { @JacksonXmlProperty(localName = "Label") @JsonProperty("Display Name") private String label; @JacksonXmlProperty(localName = "ValueType") @JsonProperty private String valueType; @JacksonXmlProperty(localName = "Editable") @JsonProperty("Editable") private String editable; @JacksonXmlProperty(localName = "Required") @JsonProperty("Required") private String required; }
import java.util.List; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; @JacksonXmlRootElement(localName = "Page") public class CsvPage { @JacksonXmlElementWrapper(useWrapping = false) @JacksonXmlProperty(localName = "Item") private List<CsvItem> csvItems; public CsvPage() { } public CsvPage(List<CsvItem> csvItems) { this.csvItems = csvItems; } public List<CsvItem> getCsvItems() { return csvItems; } public void setCsvItems(List<CsvItem> csvItems) { this.csvItems = csvItems; } }
注意scv需要设置schema也就是csv文件的列名
public static <T> List<T> toNormalObject(byte[] bytes, Class<T> clazz) throws JsonProcessingException, IOException { CsvSchema schema = CsvSchema.emptySchema().withHeader(); MappingIterator<T> mappingIterator = csvMapper .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) .readerFor(clazz).with(schema).readValues(bytes); return mappingIterator.readAll(); }
xml文件如果需要格式化输出
xmlMapper.setSerializationInclusion(include).writerWithDefaultPrettyPrinter().writeValueAsBytes(object);
writerWithDefaultPrettyPrinter需要依赖
<groupId>org.codehaus.woodstox</groupId> <artifactId>woodstox-core-asl</artifactId>
例子中的xml文件
<Page> <Item> <Label>Account</Label> <ValueType/> <Editable>true</Editable> <Required>true</Required> </Item> <Item> <Label>Outstanding</Label> <ValueType/> <Editable>false</Editable> <Required>false</Required> </Item> </Page>
例子中的csv文件
Display Name,Editable,Required Account,TRUE,TRUE Outstanding,FALSE,FALSE
例子中csv文件有三个属性xml有四个属性,所以xml中<ValueType/>属性为空
由于Jackson处理Json内容比较多
下一篇有时间再详细说明
以上
相关推荐
Java中,使用jackson完成json与Java对象互转
使用jackson完成json与java对象的互相转换实例
NULL 博文链接:https://bugyun.iteye.com/blog/2278997
json格式与java类对象相互转换。json格式转换成java类对象,List,Map。类对象转换成json。
json和java互转完整项目demo(jackson)
答:将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] 为什么用它? 答:我数据库中的主键是使用雪花算法生成的,就是因为用id的位数太多,导致在...
jackson 对象json字符串数组集合互转 各jar包 希望能用到。
Jackson为Java对象和Json的转换提供了有效的手段,是Web开发不可缺少的工具
jackson 对象转json,json转对象,json转集合,json转map,jackson忽略字段,等等
json和java互转demo(jackson),项目完整代码包含jar包
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新...
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新...
(1)Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 (2)相比json-lib框架,Jackson所依赖的jar包较少,只需下载:jackson-all-1.6.*.jar ~ jackson-all-1.8.0.jar 任何...
JSON与JAVA对象之间的转换 少量数据使用GSON 大量数据使用jackson
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 官网:http://wiki.fasterxml.com/JacksonHome 三个主要的模块: jackson-core:核心包 jackson-annotations:注解包...
标签:fasterxml、jackson、dataformat、xml、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
标签:fasterxml、jackson、dataformat、xml、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...
受java平台上各种处理xml的类库(StAX, JAXB等)启发,Jackson提供一种处理json的java类库。Jackson的目标是为开发者提供快速、准确、轻量级和用起来最爽的json处理类库。本文将概括介绍Jackson的主要功能和相关功能...
主要介绍了java jackson 将对象转json时,忽略子对象的某个属性操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java...