Как преобразовать Amazon QLDB IonStruct в Json на java?

#json #amazon-web-services #ion #amazon-qldb

Вопрос:

Я написал запрос QLDB для извлечения документа по идентификатору документа, чтобы преобразовать этот документ в ответ JSON и передать его через конечную точку rest.

 qldbDriver.QldbDriver().execute(txn ->{

            IonSystem ionSys = IonSystemBuilder.standard().build();
            Result result = txn.execute("SELECT * FROM _ql_committed_WALLET  WHERE metadata.id = ?",ionSys.newString(id));
            IonStruct person = (IonStruct) result.iterator().next();
            String s = person.get("data").toPrettyString();
           
        });
 

Вот я и хочу этого разговора.

Как я могу исправить эту проблему?

Ответ №1:

Есть много способов достичь того, что вы пытаетесь сделать. Но, исходя из вашего примера, вы можете захотеть преобразовать свой результат person непосредственно в JSON или использовать библиотеку для создания этого JSON. Если возможно преобразовать из IonValue (из которых IonStruct есть экземпляр) в POJOs, а затем вы можете преобразовать их в JSON с помощью Джексона.

 import com.fasterxml.jackson.dataformat.ion.IonObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper;

...

IonValue personValue = qldbDriver.QldbDriver().execute(txn ->{
  IonSystem ionSys = IonSystemBuilder.standard().build();
  Result result = txn.execute("SELECT * FROM _ql_committed_WALLET  WHERE metadata.id = ?",ionSys.newString(id));
  return (IonStruct) result.iterator().next();
  
});
Person person = IonObjectMapper.builder().build().readValue(personValue, Person.class);
String personJson = new ObjectMapper().writeValueAsString(person);

 

В этом примере мы берем IonValue as, возвращенный из QLDB, и преобразуем его в POJO с помощью библиотеки Jackson Ion. Затем мы используем обычную библиотеку JSON Jackson для преобразования того же Person POJO в строку JSON, которую вы затем можете отправить по своему соединению REST в качестве тела ответа.

Комментарии:

1. Еще раз спасибо @alpian