Формат данных JSON прост и все еще силен. В настоящее время вы можете встретить все больше и больше веб-приложений, которые общаются в формате JSON, чем пару лет назад. Разработчик просто читает формат, он эффективен для синтаксического анализа формата веб-браузером, и существуют базы данных, использующие его в качестве основного формата данных.
Но что происходит, когда структура данных изменяется? Вам нужно мигрировать .
И здесь вам может помочь acris-json -igration !
Пример ситуации
Давайте проясним это и предположим, что у нас есть такие данные:
{ "firstName":"John" "secondName":"Doe" "street":"Over the rainbow" "streetNr":21 }
Такие данные могут быть представлены следующим объектом домена Java:
public class Person { String firstName; String secondName; String street; Integer streetNr; // ... and getters and setters... }
Ну, это похоже на данные о человеке по имени Джон Доу. Мы сохранили его в базе данных, и вы можете ясно видеть, что secondName , вероятно, не то имя поля, которое нам действительно нравится иметь. Но разработчик допустил ошибку, и во второй версии нашей доменной модели мы исправим ее:
{ "firstName":"John" "surname":"Doe" "street":"Over the rainbow" "streetNr":21 }
Теперь вы можете увидеть суть — тысячи данных хранятся в формате, определенном классом Person в его версии # 1, но наша программа взаимодействует в версии # 2 с измененным secondName на фамилию в классе Person. Клиенты могут задаться вопросом, почему они не видят фамилии, не так ли? ?
Следует помнить одну вещь (для следующего контекста) — класс Person изменился, и в версии # 2 есть только класс Person
Скрипт простой миграции
В этой ситуации я хотел бы написать скрипт:
public class PersonV1toV2Script extends JacksonTransformationScript<ObjectNode> { @Override public void process(ObjectNode node) { rename(node, "secondName", "surname"); } }
Из приведенного выше примера ясно, что скрипт выполнит свою работу. И вы можете делать что угодно с целым деревом данных JSON — добавление новых узлов, удаление существующих, трансформация здесь и там — все благодаря модели дерева Джексона .
Как я могу выполнить это?
Существует абстрактный класс Transformer, представляющий transofmer, ответственный за передачу данных JSON в сценарий и их запись обратно.
В настоящее время существуют два вида трансформаторов:
Основанный на Джексоне является предпочтительным и более развитым, чем на основе JSONT.
Таким образом, чтобы выполнить преобразование для набора данных, вам нужно указать только две строки кода:
JacksonTransformer t = new JacksonTransformer(input, output); t.transform(PersonV1toV2Script.class.getName());
… где вход и выход представляют каталоги. Во входном каталоге все файлы обрабатываются как файлы, содержащие данные JSON, и преобразуются и записываются в выходной каталог. Для подробного тестирования вы можете посмотреть TransformerTest в проекте .
Вывод
Вспомогательный API скрипта развивается и предоставляет вам хорошие методы, такие как методы removeIfExists или addNonExistent . Мы хотели бы услышать о ваших сценариях использования, которые еще не обрабатываются с помощью acris-json -igration, чтобы проект в целом мог служить цели миграции данных JSON.