This is the home page of the Jackson Project, formerly known as the standard JSON library for Java (or JVM platform in general), or, as the "best JSON parser for Java." Or simply as "JSON for Java." More than that, Jackson is a suite of data-processing tools for Java (and the JVM platform), including the flagship streaming JSON parser / generator library, matching data-binding library (POJOs to and from JSON) and additional data format modules to process data encoded in Avro, BSON, CBOR, CSV, Smile, (Java) Properties, Protobuf, XML or YAML; and even the large set of data format modules to support data types of widely used data types such as Guava, Joda, PCollections and many, many more (see below).
While the actual core components live under their own projects -- including the three core packages (streaming, databind, annotations); data format libraries; data type libraries; JAX-RS provider; and a miscellaneous set of other extension modules -- this project act as the central hub for linking all the pieces together.
A good companion to this README is the Jackson Project FAQ.
First things first: unless you know what you are doing, DO NOT FILE ISSUES ON THE ISSUE TRACKER OF THIS REPO.
Instead, do one of the following:
- For Jackson usage questions (for core components or modules), please use the Jackson-user Google group
- or, StackOverflow,
#jackson
- or, StackOverflow,
- For reporting issues on Jackson implementation, report it against one of the components
- The most common issue you will have is with Jackson databind
- For suggestions and new ideas, try Jackson Future Ideas
Jackson suite has two major versions: 1.x is deprecated and no versions are released; 2.x is the actively developed version. These two major versions use different Java packages and Maven artifact ids, so they are not mutually compatible, but can peacefully co-exist: a project can depend on both Jackson 1.x and 2.x, without conflicts. This is by design and was chosen as the strategy to allow smoother migration from 1.x to 2.x.
The latest stable versions from these branches are:
Recommended way to use Jackson is through Maven repositories; releases are made to Central Maven Repository (CMR). Individual projects' wiki pages sometimes also contain direct download links, pointing to CMR.
Release notes for 2.x releases are found from Jackson Releases page.
Currently Jackson 2.x repositories have following actively developed branches:
2.12: next minor version being developed (as of May 2020)2.11: current stable, actively maintained branch from which patch releases are still made2.10: previous stable branch, patch releases still made2.9: non-active branch from which micro-patch releases (like 2.9.10.5) MAY be made for individual components (jackson-databindusually)master: next major version, 3.0. Still changing rapidly
Other 2.x branches exist but no full releases are planned. Micro-patches still possible
for critical security issues.
Most projects listed below are lead by Jackson development team; but some by other at-large Jackson community members. We try to keep versioning of modules compatible to reduce confusion regarding which versions work together.
Core modules are the foundation on which extensions (modules) build upon. There are 3 such modules currently (as of Jackson 2.x):
- Streaming (docs) ("jackson-core") defines low-level streaming API, and includes JSON-specific implementations
- Annotations (docs) ("jackson-annotations") contains standard Jackson annotations
- Databind (docs) ("jackson-databind") implements data-binding (and object serialization) support on
streamingpackage; it depends both onstreamingandannotationspackages
These extensions are plug-in Jackson Modules (registered with ObjectMapper.registerModule()),
and add support for datatypes of various commonly used Java libraries, by adding
serializers and deserializers so that Jackson databind package (ObjectMapper / ObjectReader / ObjectWriter) can read and write these types.
Datatype modules directly maintained by Jackson team are under the following Github repositories:
- Standard Collections datatype modules:
- jackson-datatype-eclipse-collections: support for Eclipse Collections (NEW in Jackson 2.10!)
- jackson-datatype-guava: support for many of Guava datatypes
- jackson-datatype-hppc: support for High-Performance Primitive Containers containers
- jackson-datatype-pcollections: support for PCollections datatypes (since Jackson 2.7)
- Hibernate: support for Hibernate features (lazy-loading, proxies)
- Java 8 Modules: support or JDK 8 features and datatypes through 3 separate modules
jackson-module-parameter-names: Module that adds support for using a new JDK8 feature, ability to access names of constructor and method parameters, to allow omitting@JsonProperty.jackson-datatype-jsr310: support for "Java 8 Dates" (ones added in JDK 8)- Also, for pre-Java8 users can use one of alternate pre-Java8 backports:
jackson-datatype-jdk8: support for JDK 8 data types other than date/time types, includingOptional
- Joda datatypes:
- jackson-datatype-joda: support for types of Joda-Time date/time library datatypes
- jackson-datatype-joda-money: support types of Joda-Money datatypes (
Money,CurrencyUnit)
- jackson-datatype-jsr353: support for JSON-P ("Java JSON API") types (specifically its tree model objects)
- jackson-datatype-json-org: support for org.json library types like
JSONObject,JSONArray
In addition, we are aware of additional modules that are not directly maintained by core Jackson team:
- jackson-datatype-bolts support for reading/writing types defined by Yandex Bolts collection types (Functional Programming inspired immutable collections)
- jackson-datatype-commons-lang3 for types of Apache Commons Lang v3
- jackson-datatype-money for "Java Money", see javax.money
- javaslang-jackson for Javaslang support (Feature-rich & self-contained functional programming in Java™ 8 and above)
- jackson-datatype-json-lib for supporting types defined by "net.sf.json" library (aka "json-lib")
- jackson-datatype-jts (JTS Geometry) for GeoJSON support
- jackson-lombok for better support of Lombok classes
- jackson-datatype-mongo for MongoDB types
- NOTE: there are a few alternatives to handling MongoDB datatypes
- jackson-module-objectify for datatypes of Objectify