Как "разделить" значения Map между различными массивами JSON?

У меня есть multiMap со следующими значениями:

а =1, B =2, с =3

Я хочу создать из него JSON в следующем формате:

[{"data":["a","b","c"],"StaticData":"HELLO"},{"Categories":[1,2,3]}]

Я пытаюсь использовать строковый буфер, но совершенно потерян, как поставить цикл только для ключей и только значений и как вставить некоторые статические данные между ними.

Я подумал, что если бы я мог сначала создать строку, а затем проанализировать в формате JSON, или есть ли другой способ сформировать JSON?

1 ответ

Решение

Сначала выполните итерацию HashMap, чтобы получить ключи и значения и сохранить их в List. Создайте два класса, один из которых содержит список ключей и staticData, а другой будет содержать список категорий. Установите значения в объекте класса, создайте один список и добавьте эти два объекта класса в список и сериализуйте этот список в JSON.

Я использовал библиотеку Gson для преобразования объекта в строку JSON.

Вот код для того, что вы хотите.

DataClass:

public class DataClass {
    private List<String> data;
    private String StaticData;  
    //your getter and setter method.
}  

CategoryClass:

public class CategoryClass {
   private List<String> Categories;  
   //your getter and setter method
}  

TestClass:

public static void main(String[] args) {
    try{
        Map<String, String> map = new HashMap<String, String>();
        map.put("a", "1");
        map.put("b", "2");
        map.put("c", "3");

        List<Object> obj = new ArrayList<Object>();  


        List<String> keys = new ArrayList<String>();
        List<String> values = new ArrayList<String>();

        for(Entry<String, String> myMap : map.entrySet()){
            keys.add(myMap.getKey());
            values.add(myMap.getValue());
        }  

        DataClass dataObj = new DataClass();
        dataObj.setData(keys);
        dataObj.setStaticData("HELLO");
        obj.add(dataObj);

        CategoryClass catObj  = new CategoryClass();
        catObj.setCategories(values);
        obj.add(catObj);

        Gson gson = new Gson();  
        String jsonStr = gson.toJson(obj);
        System.out.println(jsonStr);
    }
    catch(Exception ex){
        ex.printStackTrace();
    }
}

Выход:

[{"data":["b","c","a"],"StaticData":"HELLO"},{"Categories":["2","3","1"]}]    

РЕДАКТИРОВАТЬ:

Если вам нужно поддерживать порядок вставки в карту, чем использовать LinkedHashMap так что ordre ключей и значений такие же, как insert в Map.

Другие вопросы по тегам