Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Handling Json in Functional Way in Kotlin

Avatar for Uberto Barbini Uberto Barbini
October 02, 2025
12

Handling Json in Functional Way in Kotlin

Talk at Jax London 2025

Showing the motivations and the features of Kondor-Json library. And a preview of new version features.

Avatar for Uberto Barbini

Uberto Barbini

October 02, 2025
Tweet

Transcript

  1. The Usual Problems • D D DDDD D DD D

    DDD DDDD D DD D DD D D D D D D D DD D D DD D DD DDDD DD D DDDDD DD
  2. The Usual Problems • D D DDDD D DD D

    DDD DDDD D DD D DD D D D D D D D DD D D DD D DD DDDD DD D DDDDD DD • L LLL LL L L L L L L LL LL L LLLL LL L L LLLL LL L L L L LLLL L LL LLLL L L LL LL LL LLLL L L L LLL
  3. The Usual Problems • D D DDDD D DD D

    DDD DDDD D DD D DD D D D D D D D DD D D DD D DD DDDD DD D DDDDD DD • L LLL LL L L L L L L LL LL L LLLL LL L L LLLL LL L L L L LLLL L LL LLLL L L LL LL LL LLLL L L L LLL • U UUUU U UUsU UUU U UU U U U UUUU U U U U U UU UU U UU U U U UU U U U UUUUUU UU
  4. The Usual Problems • D D DDDD D DD D

    DDD DDDD D DD D DD D D D D D D D DD D D DD D DD DDDD DD D DDDDD DD • L LLL LL L L L L L L LL LL L LLLL LL L L LLLL LL L L L L LLLL L LL LLLL L L LL LL LL LLLL L L L LLL • U UUUU U UUsU UUU U UU U U U UUUU U U U U U UU UU U UU U U U UU U U U UUUUUU UU • A A A A A A A A A A A A AA A A AA A A AAAAA A A AAA A AAA A A A A AAAA A AAA A AA A A AAAAA
  5. The Usual Problems • D D DDDD D DD D

    DDD DDDD D DD D DD D D D D D D D DD D D DD D DD DDDD DD D DDDDD DD • L LLL LL L L L L L L LL LL L LLLL LL L L LLLL LL L L L L LLLL L LL LLLL L L LL LL LL LLLL L L L LLL • U UUUU U UUsU UUU U UU U U U UUUU U U U U U UU UU U UU U U U UU U U U UUUUUU UU • A A A A A A A A A A A A AA A A AA A A AAAAA A A AAA A AAA A A A A AAAA A AAA A AA A A AAAAA • D D Di D DD D D D DDDDD D DD DDD DDD D DD D i D D D D DDDD D DD D D D DD D D D DDDD D D
  6. The Usual Problems • D D DDDD D DD D

    DDD DDDD D DD D DD D D D D D D D DD D D DD D DD DDDD DD D DDDDD DD • L LLL LL L L L L L L LL LL L LLLL LL L L LLLL LL L L L L LLLL L LL LLLL L L LL LL LL LLLL L L L LLL • U UUUU U UUsU UUU U UU U U U UUUU U U U U U UU UU U UU U U U UU U U U UUUUUU UU • A A A A A A A A A A A A AA A A AA A A AAAAA A A AAA A AAA A A A A AAAA A AAA A AA A A AAAAA • D D Di D DD D D D DDDDD D DD DDD DDD D DD D i D D D D DDDD D DD D D D DD D D D DDDD D D • D D D D D D D D DD DD DDDD DD D DDDDDD D D D D D D DDDD D D DDDDD DDD D D D D DD D D DD DD D D D D
  7. The Usual Problems • D D DDDD D DD D

    DDD DDDD D DD D DD D D D D D D D DD D D DD D DD DDDD DD D DDDDD DD • L LLL LL L L L L L L LL LL L LLLL LL L L LLLL LL L L L L LLLL L LL LLLL L L LL LL LL LLLL L L L LLL • U UUUU U UUsU UUU U UU U U U UUUU U U U U U UU UU U UU U U U UU U U U UUUUUU UU • A A A A A A A A A A A A AA A A AA A A AAAAA A A AAA A AAA A A A A AAAA A AAA A AA A A AAAAA • D D Di D DD D D D DDDDD D DD DDD DDD D DD D i D D D D DDDD D DD D D D DD D D D DDDD D D • D D D D D D D D DD DD DDDD DD D DDDDDD D D D D D D DDDD D D DDDDD DDD D D D D DD D D DD DD D D D D • M MMM MM M MM M MM M M M M MM M MM M M M MMMM M M MM MM MM MMMMMM MM MMMMMMM MMMM
  8. The Usual Problems • Domain Objects don’t map exactly on

    the Json protocol required • Lots of Domain Tiny Types that shouldn’t appear in Json (eg. Ids, Age, Money) • Using re fl ection makes easy to break things when refactoring • Annotations and custom serializers work but they taint the domain • Di ff erent collaborators want di ff erent Json for the same objects • Data Transfer Objects brings a lot of duplication and are a source of bugs • Most of Json libraries need a single shared instance (Singleton) • Solutions based on code generations are hard to maintain
  9. Functional Design Pure Functions and Immutable Objects interface ToJson<T> {

    fun toJson(value: T): String } interface FromJson<T> { fun fromJson(json: String): JsonOutcome<T> } interface JsonConverter<T, JN : JsonNode> : Profunctor<T, T>, ToJson<T>, FromJson<T> { val _nodeType: NodeKind<JN> val jsonStyle: JsonStyle get() = JsonStyle.singleLine fun schema(): JsonNodeObject = valueSchema(_nodeType) ... }
  10. Why Open Source it? • Main drive: be able to

    use it in a new job • Contributions from many people, each with their own interesting issue • More eyes for issues and security • Not a huge e ff ort but still it takes a few hours a month • LLMs are helping a lot with docs and other small issues
  11. Version 4.0 • 2x Performance Improvement (skipping JsonNode allocation) •

    New Auto converters with “TestTime” re fl ection