Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Handling Json in Functional Way in Kotlin

Avatar for Uberto Barbini Uberto Barbini
October 02, 2025
3

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