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内容比较多
下一篇有时间再详细说明
以上
相关推荐
- **反序列化(Deserialization)**:从JSON字符串中恢复到原来的Java对象,方便数据的读取和处理。 - **树模型操作**:`JsonNode`对象表示JSON数据的树结构,可以方便地对JSON数据进行遍历和修改。 - **类型绑定...
6. 高级特性,如流式API(`JsonParser`的token-based操作)、数据绑定API(`ObjectMapper`的便利操作)、树模型API(`JsonNode`的JSON对象操作)以及支持处理XML、CSV等其他格式的模块。 通过深入学习和实践这个...
Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的序列化和反序列化功能,能够将Java对象转换为JSON格式的字符串,同时也能将JSON数据转换回Java对象。在这个小例子中,我们将深入探讨如何使用Jackson进行...
Jackson还支持许多高级特性,如类型转换、XML和CSV绑定、JSON Schema生成、数据绑定自定义以及流式处理等。对于大型项目或高流量应用,理解并有效利用这些特性能够显著提高性能和代码可维护性。 总的来说,Jackson ...
除了基本的功能外,Jackson库还有许多高级特性,如类型转换、类型安全的泛型处理、处理日期和时间的模块、以及对XML和CSV的支持等。在实际开发中,根据具体需求,可以结合使用这些特性来优化JSON操作的效率和灵活性...
- 扩展性强:Jackson有许多可选模块,如处理XML(jackson-dataformat-xml)、YAML(jackson-dataformat-yaml)和CSV(jackson-dataformat-csv),以及处理日期和时间(joda-time、java8-time)等。 - 高度兼容性:...
6. **模块扩展**:Jackson支持许多额外的模块,如处理JAXB注解、XML、CSV等格式。 7. **性能优化**:Jackson提供了多种方式提高处理速度,如启用树模型、使用`writeValueUsingNativeTypes()`方法等。 总的来说,...
- **模块扩展**:Jackson有一个庞大的生态系统,有许多额外的模块,如处理XML、CSV、YAML的模块,以及支持Gson、JAXB等其他格式的适配器。 在开发过程中,正确理解和使用这三者之间的关系,能够极大提高JSON处理的...
3. **Jackson-dataformat**:这部分通常包含用于处理特定数据格式的模块,比如处理XML或CSV。在这个案例中,可能指的是JSON数据格式的支持,但没有明确的文件名提供,可能是指`jackson-dataformat-json-2.9.3.jar`。...
- **模块扩展**:Jackson生态系统还包括其他模块,如处理XML、CSV的模块,以及支持Gson、protobuf等其他格式的互操作性模块。 - **性能优化**:Jackson提供了许多性能优化策略,如启用流式处理、使用树模式、缓存...
4. **其他模块**:除了上述核心模块外,Jackson还有许多其他的扩展模块,如处理XML(jackson-dataformat-xml)、处理CSV(jackson-dataformat-csv)等,但在这个`jackson-all`包中,它们可能没有被包含。 使用`...
Jackson 在处理过程中遇到问题时会抛出异常,如`JsonParseException`、`JsonMappingException`等,需要在代码中适当地捕获和处理。 9. **与其他库的集成** Jackson 可以很好地与Spring、Hibernate等其他框架集成...
Jackson以其高效性能而闻名,它优化了内存使用和处理速度,尤其在处理大量数据时,性能表现突出。 8. **广泛的应用** Jackson被许多知名项目和框架所采用,如Spring、Hibernate和Play Framework等,它已经成为...
Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、序列化和反序列化JSON数据。标题中的"jackson2.2.3jar包集合.rar"指的是Jackson库的2.2.3版本的Java档案(JAR)文件集合,通常...
- 扩展性强:Jackson有一个庞大的生态系统,包含了许多扩展模块,如处理XML、CSV、YAML等其他格式的库。 在实际应用中,Jackson可以轻松集成到Spring框架、Hibernate等Java后端技术中,极大地提高了开发效率。例如...
7. **模块扩展**:Jackson有大量扩展模块,如支持XML的`jackson-dataformat-xml`,支持CSV的`jackson-dataformat-csv`,以及用于处理Java 8特性的`jackson-datatype-jsr310`等。 8. **兼容性**:Jackson库兼容Java ...
4. **其他扩展模块**: Jackson还提供了许多其他模块,如处理XML(Jackson-dataformat-xml)、处理YAML(Jackson-dataformat-yaml)、处理CSV(Jackson-dataformat-csv)等,以支持多种数据格式。 在实际开发中,...
Jackson是Java领域中广泛使用的序列化和反序列化库,尤其在处理JSON数据时表现出色。它由 FasterXML 组织开发,旨在提供高性能、易用性以及灵活性,使得Java对象与JSON之间的转换变得轻而易举。Jackson库主要包括三...
同时,Jackson库还支持其他扩展模块,如处理XML(jackson-dataformat-xml)、CSV(jackson-dataformat-csv)等不同格式的数据,以及支持Gson风格的API(jackson-module-jsonSchema)等。 总的来说,Jackson 2.9.4...
Jackson还支持数据绑定、树模型(JsonNode)、处理嵌套JSON以及XML和CSV的转换等功能。其高性能和强大的功能使得它成为Java开发者处理JSON数据的首选工具。然而,为了获得最佳性能和避免内存消耗,需要合理配置和...