Immutable JSON :: Codec

Immutable JSON

License

License

Categories

Categories

Net JSON Data
GroupId

GroupId

net.hamnaberg.json
ArtifactId

ArtifactId

immutable-json-codec
Last Version

Last Version

7.1.0
Release Date

Release Date

Type

Type

jar
Description

Description

Immutable JSON :: Codec
Immutable JSON

Download immutable-json-codec

How to add to project

<!-- https://jarcasting.com/artifacts/net.hamnaberg.json/immutable-json-codec/ -->
<dependency>
    <groupId>net.hamnaberg.json</groupId>
    <artifactId>immutable-json-codec</artifactId>
    <version>7.1.0</version>
</dependency>
// https://jarcasting.com/artifacts/net.hamnaberg.json/immutable-json-codec/
implementation 'net.hamnaberg.json:immutable-json-codec:7.1.0'
// https://jarcasting.com/artifacts/net.hamnaberg.json/immutable-json-codec/
implementation ("net.hamnaberg.json:immutable-json-codec:7.1.0")
'net.hamnaberg.json:immutable-json-codec:jar:7.1.0'
<dependency org="net.hamnaberg.json" name="immutable-json-codec" rev="7.1.0">
  <artifact name="immutable-json-codec" type="jar" />
</dependency>
@Grapes(
@Grab(group='net.hamnaberg.json', module='immutable-json-codec', version='7.1.0')
)
libraryDependencies += "net.hamnaberg.json" % "immutable-json-codec" % "7.1.0"
[net.hamnaberg.json/immutable-json-codec "7.1.0"]

Dependencies

compile (2)

Group / Artifact Type Version
net.hamnaberg.json : immutable-json-ast jar 7.1.0
net.hamnaberg : arities jar 0.5.0

test (1)

Group / Artifact Type Version
junit : junit jar 4.13

Project Modules

There are no modules declared in this project.

Immutable Json library for java

This project attempts to build and AST ( Abstract Syntactic Tree ) for Json and provide a useful way to work with that tree.

Note

Starting with version 7, we require JDK11. Vavr has been dropped as a dependency.

Status

Maven Central Build Status Gitter Chat

Community

Adopters

Are you using immutable-json? Please consider opening a pull request to list your organization here:

  • Your Organization here

Related projects

Usage

A short example showing encoding/decoding of a few different types. Also note that the Tuples type is from net.hamnaberg.json.util to have Tuple constructors up to Tuple27

    static class Event {
        public final UUID ID;
        public final List<String> tags;
        public final String message;

        public Event(UUID ID, List<String> tags, String message) {
            this.ID = ID;
            this.tags = tags;
            this.message = message;
        }
    }

    @Test
    public void testEvent() throws Exception {
        String expected = "{"+
                      "\"id\":\"1e2f28ff-54b5-4ad4-9edb-36712dc52202\","+
                      "\"tags\":[\"travel\",\"code\"],"+
                      "\"message\":\"This is a test\""+
                   "}";

        // create a decoder for our Event
        DecodeJson<Event> decode = Decoders.decode(
                Decoders.DUUID.fieldDecoder("id"),
                FieldDecoder.TList("tags", Decoders.DString).withDefaultValue(Collections.emptyList()),
                FieldDecoder.TString("message"),
                Event::new
        );

        // create an encoder that will encode our Event into json
        EncodeJson<Event> encode = Encoders.encode(
                Encoders.EUUID.fieldEncoder("id"),
                FieldEncoder.EList("tags", Encoders.EString),
                FieldEncoder.EString("message")
        ).contramap(event -> Tuples.of(event.ID, event.tags, event.message));

        // a codec can both encode and decode a value
        JsonCodec<Event> codec = JsonCodec.lift(decode, encode);

        // parse raw json with help of jackson parser
        Json.JValue jValue = new JacksonStreamingParser().parse(expected);

        String json = codec
                .toJson(codec.fromJson(jValue).unsafeGet())
                .nospaces();

        assertThat(json).isEqualTo(expected);
    }

Where can we find this

Using maven, you download it from Maven Central using these coordinates:

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-ast</artifactId>
  <version>7.0.1</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-pointer</artifactId>
  <version>7.0.1</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-patch</artifactId>
  <version>7.0.1</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-jackson</artifactId>
  <version>7.0.1</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-javax</artifactId>
  <version>7.0.1</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-gson</artifactId>
  <version>7.0.1</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-codec</artifactId>
  <version>7.0.1</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-reflection-codec</artifactId>
  <version>7.0.1</version>
</dependency>

Snapshots can be found from Sonatype:

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-ast</artifactId>
  <version>7.1.0-SNAPSHOT</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-pointer</artifactId>
  <version>7.1.0-SNAPSHOT</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-jackson</artifactId>
  <version>7.1.0-SNAPSHOT</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-native</artifactId>
  <version>7.1.0-SNAPSHOT</version>
 </dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-javax</artifactId>
  <version>7.1.0-SNAPSHOT</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-codec</artifactId>
  <version>7.1.0-SNAPSHOT</version>
</dependency>

<dependency>
  <groupId>net.hamnaberg.json</groupId>
  <artifactId>immutable-json-reflection-codec</artifactId>
  <version>7.1.0-SNAPSHOT</version>
</dependency>

License

We are using the Apache License 2.0

Contributing

All contributions are welcome! Documentation is sorely lacking and really needs some love. If you find a missing combinator, please open a PR or issue so we can discuss it. Any bugs or missing features are also welcome.

Versions

Version
7.1.0
7.0.1
7.0.0
6.2.0
6.1.0
6.0.0
5.2.0
5.1.0
5.0.0
4.1.0
4.0.1
4.0.0
3.6.1
3.6.0
3.5.0
3.0.0
2.2.1
2.2.0
2.1.0
2.0.0