:jbake-type: page
:jbake-status: published

= Apache Tamaya - Extension: JSON Format

toc::[]


[[JSON]]
== Tamaya JSON (Extension Module)
Tamaya _JSON_ is an extension module. Refer also to the link:../extensions.html[extensions documentation] for further details.

=== What functionality does this module provide?

Tamaya _JSON_ provides support for reading configuration in JSON (Java Serialized Object Notation):

[source, json]
-----------------------------------------------
{
  "a.b":{
    "key1": "blabla",
    "key2": true
  }
}
-----------------------------------------------

Hereby the hierarchical structure of the JSON document will be mapped to a
corresponding `PropertyValue` tree structure. This structure can be mapped
to flat key-value pairs of type `String`, e.g. the above will be mapped to

[source, properties]
-----------------------------------------------
a.b.key1=blabla
a.b.key2=true
-----------------------------------------------

This extension implements the SPI defined by the +tamaya.formats+ extension module.


=== Compatibility

The module is based on Java 8.


=== Installation

To use the JSON extension module you only must add the corresponding dependency to your module:

[source, xml, subs=attributes+]
-----------------------------------------------
<dependency>
  <groupId>org.apache.tamaya.ext</groupId>
  <artifactId>tamaya-json</artifactId>
  <version>{tamaya_version}</version>
</dependency>
-----------------------------------------------

This extension also transitively requires the +tamaya.formats+ module.


=== Reading configuration in JSON

For reading JSON based configuration most easily a +JSONFormat+ can be
used:

[source, java]
-----------------------------------------------
ConfigurationData dataRead = ConfigurationFormats.getInstance().readConfigurationData(
    getClassLoader().getResource("myFileConfig.json"), new JSONFormat()));
-----------------------------------------------

Or, if you are fine with the _default_ mapping you can directly create a
+PropertySource+ using the _formats_ API (this works since this module
registers the _json_ format automatically using the `ServiceContext`):

[source, java]
-----------------------------------------------
PropertySource ps = ConfigurationFormats.getInstance().createPropertySource(
    getClassLoader().getResource("myFileConfig.json"));
-----------------------------------------------
