Использование Apache Commons Digester с JSON

Я пишу класс, который расширяет класс, использующий Digester для анализа XML-ответа от API (пример существующий класс, фрагмент кода ниже). После получения ответа код создает объект и добавляет к нему определенные методы.

Фрагмент кода отредактирован для краткости:

      private Digester createDigester() {
        Digester digester = new Digester();

        digester.addObjectCreate("GeocodeResponse/result", GoogleGeocoderResult.class);
        digester.addObjectCreate("GeocodeResponse/result/address_component", GoogleAddressComponent.class);
        digester.addCallMethod("GeocodeResponse/result/address_component/long_name", "setLongName", 0);
...
        digester.addSetNext("GeocodeResponse/result/address_component", "addAddressComponent");

        Class<?>[] dType = {Double.class};
        digester.addCallMethod("GeocodeResponse/result/formatted_address", "setFormattedAddress", 0);
...
        digester.addSetNext("GeocodeResponse/result", "add");
        return digester;
      }
    }

Однако API, который я буду вызывать, поддерживает только JSON. Я нашел вероятный solution, которое включает в себя преобразование JSON в XML и последующий запуск его через Digester, но это кажется невероятно хакерским.

public JsonDigester(final String customRootElementName) {
    super(new JsonXMLReader(customRootElementName));
  }

Есть лучший способ сделать это?


person Tony Laidig    schedule 14.03.2016    source источник


Ответы (1)


Этот класс специально предназначен для работы с XML в соответствии с документацией:

По сути, пакет Digester позволяет настроить модуль сопоставления объектов XML -> Java, который инициирует определенные действия, называемые правилами, всякий раз, когда распознается конкретный шаблон вложенных элементов XML. Для вашего использования доступен богатый набор предопределенных правил, или вы также можете создать свои собственные.

Почему вы думаете, что это будет работать с JSON?

person Community    schedule 14.03.2016
comment
Да, это вопрос. Есть ли менее хакерский способ принять закодированный объект JSON? Абстрактный класс, который я расширяю, по-видимому, полагается на Digester. - person Tony Laidig; 14.03.2016
comment
Да, есть менее хакерский способ, используйте XML для начала, как он требует, или не используйте его. - person ; 14.03.2016