Статьи

Миграция данных JSON


Формат данных 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.