Как "разделить" значения 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.