I need to produce the JSON dynamically from a Map Data
I need to produce this below JSON
[
    {
        "name": "Chips & Chocolates",
        "T2": [
            {
                "name": "Chips & Chocolates***Bummy Chips",
                "T3": [
                    {
                        "name": "Chips & Chocolates***Bummy Chips***Masala Roasted with peanuts"
                    },
                    {
                        "name": "Chips & Chocolates***Bummy Chips***Nimbu filled"
                    }
                ]
            }
        ]
    }
]
But ending up creating the following JSON
[
    {
        "name": "Chips & Chocolates",
        "T2": [
            {
                "name": "Chips & Chocolates***Bummy Chips",
                "T3": [
                    {
                        "name": "Chips & Chocolates***Bummy Chips***Masala Roasted with peanuts"
                    }
                ]
            },
            {
                "name": "Chips & Chocolates***Bummy Chips",
                "T3": [
                    {
                        "name": "Chips & Chocolates***Bummy Chips***Nimbu filled"
                    }
                ]
            }
        ]
    }
]
This is my complete program
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class Test {
    private static JSONObject processString(String data, int level,String key) throws JSONException {
        JSONObject json = new JSONObject();
        int index = data.indexOf(',');
        String name = data;
        String  value = "";
        String remainder = "";
        if (index < 0) {
            index = name.indexOf('(');
            if (index > 0) {
                name = data.substring(0, index);
            }
        } else {
            name = data.substring(0, index);
            remainder = data.substring(name.length() + 1);
        }
        String fullpath = key+"***"+name;
          value = fullpath;
        System.out.println(fullpath);
        json.put("name", fullpath);
        JSONArray jsonarray = new JSONArray();
        if (remainder.length() > 0) {
            jsonarray.put(processString(remainder, level + 1,fullpath));
            if(!value.equals(fullpath))
            {
                 json.put("T" + level, jsonarray);
            }
        }
        return json;
    }  
    private static JSONArray processList(List<String> list, int level,String key) throws JSONException {
        JSONArray json = new JSONArray();
        for (String data : list) {
            json.put(processString(data, level,key));
        }
        return json;
    }  
    private static JSONArray processMap(Map<String, List<String>> map, int level) throws JSONException {
        JSONArray array =new JSONArray(); 
         for (String key : map.keySet()) { 
              JSONObject json = new JSONObject(); 
              json.put("name", key);
              json.put("T" + level, processList(map.get(key), level + 1,key));
              array.put(json); 
         } 
         return array;
    }        
    public static void main(String args[]) {
        Map<String, List<String>> consilatedMapMap = new LinkedHashMap<String, List<String>>();
        List<String> values = new LinkedList<String>();
        values.add("Bummy Chips,Masala Roasted with peanuts(49)");
        values.add("Bummy Chips,Nimbu filled(50)");
        consilatedMapMap.put("Chips & Chocolates", values);
        try {
            int level = 2;
            JSONArray json = processMap(consilatedMapMap, level);
            System.out.println(json);
        } catch(JSONException x) {
            x.printStackTrace();
            System.exit(-1);
        }
}
}
When i run it , the following gets displayed
Output of the above program
Chips & Chocolates***Bummy Chips
Chips & Chocolates***Bummy Chips***Masala Roasted with peanuts
Chips & Chocolates***Bummy Chips
Chips & Chocolates***Bummy Chips***Nimbu filled
[
    {
        "name": "Chips & Chocolates",
        "T2": [
            {
                "name": "Chips & Chocolates***Bummy Chips",
                "T3": [
                    {
                        "name": "Chips & Chocolates***Bummy Chips***Masala Roasted with peanuts"
                    }
                ]
            },
            {
                "name": "Chips & Chocolates***Bummy Chips",
                "T3": [
                    {
                        "name": "Chips & Chocolates***Bummy Chips***Nimbu filled"
                    }
                ]
            }
        ]
    }
]
I have tried by putting a condition as
if(!value.equals(fullpath)) { json.put("T" + level, jsonarray); }
 
     
    