jsonamazon-web-servicesamazon-qldbamazon-ion

How to convert Amazon QLDB IonStruct to Json in java?


I have written a QLDB query to fetch a document by document ID So that I want to convert this document to a JSON response and pass it through the rest end point.

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();
           
        });

Here I want that conversation.

How can I fix this issue?


Solution

  • There are many ways to achieve what you are trying to do. But picking up from your example, you might want to convert your result person into JSON directly, or you might want to use a library to generate that JSON. If it possible to convert from IonValue (of which IonStruct is an instance) to POJOs and then you could convert those to JSON using Jackson.

    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);
    
    

    In this example we are taking the IonValue as returned from QLDB and converting it to a POJO using the Jackson Ion library. Then we use the regular JSON Jackson library to convert that same Person POJO into a JSON string which you can then send over your REST connection as the body of the response.