Во многих языках программирования использование Json (сериализация и десериализация значений) является повседневным делом, и это можно легко сделать. Например в питоне:

Кроме того, в C # с использованием Json.NET я могу быстро десериализовать Json в объектную модель и из объекта в строку Json и получить все преимущества статических типов:

Де / сериализация в одну строку

В обоих случаях де / сериализация Json является однострочным, и я считаю, что так должно быть на всех языках!

Вот почему я был так удивлен, узнав, насколько многословным вы должны быть для де / сериализации вещей в java и scala. Существует множество опций и библиотек, но в большинстве случаев вам приходится иметь дело с промежуточными AST, настраиваемыми сериализаторами, неявными объектами и множеством шаблонов.
Большинство этих проблем возникает из-за стирания типов в Java. Который заменяет все универсальные типы их границами или объектами. Это означает, что настоящих универсальных типов
во время выполнения нет, так как все универсальные типы стираются.

Все, что я хочу в библиотеке Json, - это иметь возможность де / сериализовать классы кейсов Json в Scala и объекты Java POJO в одной строке и с минимальной настройкой.

JsonExtensions

Несмотря на то, что было испробовано множество Json-библиотек для java и scala, все они в той или иной мере терпят неудачу. Вот почему я решил создать JsonExtensions, легкую оболочку для json4s.

JsonExtensions скрывает все шаблоны и позволяет мне де / сериализовать значения так же, как я бы сделал это на других языках.

Это пример того, что вы можете с ним сделать:

Для java POJO вам необходимо импортировать другой набор расширений, но код останется прежним:

JavaExtensions еще не совсем там

К сожалению, эта библиотека не рассматривает все возможные случаи, перечисления scala и объект case, и это лишь некоторые из них. Поэтому существуют способы передать собственные сериализаторы.

Начиная

Все, что вам нужно сделать, это добавить следующее в свой build.sbt

libraryDependencies += "io.onema" % "json-extensions_2.12" % "0.1.0"

Вывод

По большей части мне удавалось использовать эту библиотеку в нескольких личных проектах, и она оказалась очень надежной. Не стесняйтесь комментировать ниже или отправлять PR, если вы знаете, как оптимизировать этот процесс.