Product:
+-------------+--------------+-------+
| ProductCode | OrderDate | User |
+-------------+--------------+-------+
| 100 | 2015-01-01 | John |
| 100 | 2015-01-01 | Peter |
| 100 | 2015-01-02 | Max |
| 200 | 2015-01-01 | Max |
| 200 | 2015-01-05 | John |
| 300 | 2015-01-10 | Peter |
+-------------+--------------+-------+
Expected JSON structure:
{
"100": {
"2015-01-01": {
"Jon": {
"spent": "...",
"comment": "..."
},
"Peter": {
"spent": "...",
"comment": "..."
}
},
"2015-01-02": {
"Max": {
"spent": "...",
"comment": "..."
}
}
},
"200": {
"2015-01-01": {
"Max": {
"spent": "...",
"comment": "..."
}
},
"2015-01-05": {
"Jon": {
"spent": "...",
"comment": "..."
}
}
},
"300": {
"2015-01-10": {
"Peter": {
"spent": "...",
"comment": "..."
}
}
}
}
What I have done so far:
//Create ListMultimap
ListMultimap<String, Product> productCodeMap = ArrayListMultimap.create();
ListMultimap<String, Product> productDateMap = ArrayListMultimap.create();
ListMultimap<String, Product> productUserMap = ArrayListMultimap.create();
//Fetch products
products = dao.getProducts();
//Create map with relevant keys
for(Product product : products){
productCodeMap.put(product.getProductCode(), product);
}
for(String productDate : productCodeMap.keySet()){
for(Product product : productCodeMap.get(productDate)){
productDateMap.put(product.getProductOrderDate(), product);
}
}
for(String productUser : productDateMap.keySet()){
for(Product product : productDateMap.get(productDate)){
productUserMap.put(productUser, product);
}
}
How should I iterate the maps to generate desired JSON structure? Should I use a different collection datastructure instead?
I am using Jackson Streaming API to generate the JSON.
Will be great even if you could suggest to generate equivalent JAVA String as what I am really doing is generating a JSON by manual writing.