user7990897
user7990897

Reputation: 13

How to merge 2 objects in java

I want to save JSON data in dynamodb DB table as a column name with the corresponding value, i,e:

Date = 2017-06-12
Cash Buyer = 5751.0

To push the data into dynamodb table I need the JSON to be in the form of List<Map<String,Object>> Format.

The json data looks like this:

{"dataset":{"id":19701916,"column_names":["Date","Cash Buyer","Cash Seller \u0026 Settlement","3-months Buyer","3-months Seller","15-months Buyer","15-months Seller","Dec 1 Buyer","Dec 1 Seller","Dec 2 Buyer","Dec 2 Seller","Dec 3 Buyer","Dec 3 Seller"],"frequency":"daily","type":"Time Series","premium":false,"limit":null,"transform":null,"column_index":null,"start_date":"2012-01-03","end_date":"2017-06-14","data":[["2017-06-14",5684.0,5684.5,5715.0,5717.0,null,null,5780.0,5790.0,5790.0,5800.0,5790.0,5800.0],["2017-06-13",5658.0,5659.0,5692.0,5693.0,null,null,5750.0,5760.0,5765.0,5775.0,5760.0,5770.0],["2017-06-12",5751.0,5752.0,5782.0,5783.0,null,null,5835.0,5845.0,5850.0,5860.0,5845.0,5855.0]"database_id":13206}}

This JSON Data has column name in one list and thier corresponding value in another Array List.I am getting this JSON Data from an API. Can someone help me in this?

Upvotes: 1

Views: 509

Answers (1)

Darshan Mehta
Darshan Mehta

Reputation: 30839

First of all, the json is invalid (you can validate it here). Once validated, you can use any Json serialisation tool to read and transform it. Below is an example with Jackson (documentation here):

//Deserialisation
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> dataMap = (Map<String, Object>) mapper.readValue("{\"dataset\":{\"id\":19701916,\"column_names\":[\"Date\",\"Cash Buyer\",\"Cash Seller Settlement\",\"3-months Buyer\",\"3-months Seller\",\"15-months Buyer\",\"15-months Seller\",\"Dec 1 Buyer\",\"Dec 1 Seller\",\"Dec 2 Buyer\",\"Dec 2 Seller\",\"Dec 3 Buyer\",\"Dec 3 Seller\"],\"frequency\":\"daily\",\"type\":\"Time Series\",\"premium\":false,\"limit\":null,\"transform\":null,\"column_index\":null,\"start_date\":\"2012-01-03\",\"end_date\":\"2017-06-14\",\"data\":[[\"2017-06-14\",5684.0,5684.5,5715.0,5717.0,null,null,5780.0,5790.0,5790.0,5800.0,5790.0,5800.0],[\"2017-06-13\",5658.0,5659.0,5692.0,5693.0,null,null,5750.0,5760.0,5765.0,5775.0,5760.0,5770.0],[\"2017-06-12\",5751.0,5752.0,5782.0,5783.0,null,null,5835.0,5845.0,5850.0,5860.0,5845.0,5855.0]]}}", Map.class);
System.out.println(transform((Map<String, Object>)dataMap.get("dataset")));


//Transformation

private static List<Map<String,Object>> transform (Map<String, Object> dataMap){
    List<Map<String,Object>> result = new ArrayList<>();
    List<String> columns = (List<String>) dataMap.get("column_names");
    List<List<Object>> data = (List<List<Object>>) dataMap.get("data");

    for(List<Object> dataElement : data){
        Map<String, Object> element = new HashMap<>();
        for(int i = 0 ; i < dataElement.size() ; i++){
            element.put(columns.get(i), dataElement.get(i));
        }
        result.add(element);
    }

    return result;
}

P.S. This is just an example using Map and List. You can create Pojos and use those to get rid of casting.

Upvotes: 1

Related Questions