Main Portal page for the Jackson project
This is the home page of the Jackson Project.
(note: for up-to-date release info, see Jackson Releases)
Jackson has been known as "the Java JSON library" or "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, TOML, 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.
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.
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
package; it depends both on streaming
and annotations
packagesThese extensions are plug-in Jackson Module
s (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:
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)
jackson-datatype-jdk8
: support for JDK 8 data types other than date/time types, including Optional
Money
, CurrencyUnit
)javax.json
) and "new" (jakarta.json
):
jakarta.json
(added in Jackson 2.12.2)javax.json
JSONObject
, JSONArray
In addition, we are aware of additional modules that are not directly maintained by core Jackson team:
jackson-dataformat-protobuf
which adds support for encoding/decoding protobuf content but which does NOT depend on standard Java protobuf librarycom.github.caligin.tinytypes
, artifact tinytypes-jackson
)org.vertx.java.core.json.JsonObject
objects (repackaged org.json
node types)Jackson JAX-RS Providers has handlers to add dataformat
support for JAX-RS implementations (like Jersey, RESTeasy, CXF).
Providers implement MessageBodyReader
and MessageBodyWriter
.
Supported formats currently include JSON
, Smile
, XML
, YAML
and CBOR
.
Data format modules offer support for data formats other than JSON.
Most of them simply implement streaming
API abstractions, so that databinding component can be used as is; some offer (and few require) additional databind
level functionality for handling things like schemas.
Currently following data format modules are fully usable and supported (version number in parenthesis, if included, is the first Jackson 2.x version to include module; if missing, included from 2.0)
streaming
implementation plus additional databind
-level support for Avro Schemasstreaming
api, with optional convenience databind
additionsAvro
streaming
API, no changes for databind
streaming
and databind
implementationsstreaming
and databind
implementations. Similar to JAXB' "code-first" mode (no support for "XML Schema first", but can use JAXB beans)streaming
implementationThere are also other data format modules, provided by developers outside Jackson core team:
MsgPack
) format
Jackson annotations define intended properties and expected handling for POJOs, and in addition to Jackson itself using this for reading/writing JSON and other formats, it also allows generation of external schemas. Some of this functionality is included in above-mentioned data-format extensions; but there are also many stand-alone Schema tools, such as:
Other fully usable modules by FasterXML team include:
@JacksonInject
(or in addition to)JAXB
annotations as an alternative (in addition to or instead of) standard Jackson annotations@JacksonInject
annotation@JsonProperty
.While Jackson databind is a good choice for general-purpose data-binding, its footprint and startup overhead may be problematic in some domains, such as mobile phones; and especially for light usage (couple of reads or writes). In addition, some developers find full Jackson API overwhelming.
For all these reasons, we decided to create a much simpler, smaller library, which supports a subset of functionality, called Jackson jr. It builds on Jackson Streaming API, but does not depend on databind. As a result its size (both jar, and runtime memory usage) is considerably smaller; and its API is very compact.
If you would like to help with Jackson project, please check out Contributing.
You may also want to check out:
Jackson components are supported by the Jackson community through mailing lists, Gitter forum, Github issues. See Contributing for full details.
In addition to free (for all) community support, enterprise support—starting with version 2.10—is available as part of the Tidelift Subscription for (most) Jackson components.
The maintainers of Jackson
and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.
The recommended mechanism for reporting possible security vulnerabilities follows so-called "Coordinated Disclosure Plan" (see definition of DCP for general idea). The first step is to file a Tidelift security contact: Tidelift will route all reports via their system to maintainers of relevant package(s), and start the process that will evaluate concern and issue possible fixes, send update notices and so on. Note that you do not need to be a Tidelift subscriber to file a security contact.
Alternatively you may also report possible vulnerabilities to info
at fasterxml dot com
mailing address. Note that filing an issue to go with report is fine, but if you do that please
DO NOT include details of security problem in the issue but only in email contact.
This is important to give us time to provide a patch, if necessary, for the problem.
Jackson bugs need to be reported against component they affect: for this reason, issue tracker
is not enabled for this project.
If you are unsure which specific project issue affects, the most likely component
is jackson-databind
, so you would use
Jackson Databind Issue Tracker.
For suggestions and new ideas, try Jackson Future Ideas
For first-time users there are many good Jackson usage tutorials, including general usage / JSON tutorials:
and more specific tutorials:
Following reports have been published about Jackson components
Since you probably want opinions by Java developers NOT related to Jackson project, regarding which library to use, here are links to some of existing independent comparisons: