Над проектом, над которым я работал, когда мы создали наш собственный инструмент генерации json, и сделали что-то очень похожее. Карты представляют собой объект-литералы, а списки представляют собой массивы. Таким образом, у нас были карты, у которых были списки, у которых были карты. Наша утилита проверила бы тип каждого свойства, и если бы это был список, вызовите один метод, а если бы это была карта, то вызовите другой метод, рекурсивно. У нашего утилиты были такие методы, как
public String writeJson(Map map, String json) {
/*
Code that looped thru the entries of the map and determined whether to
1. add a property to the String for a simple type
2. recurse into this method if the entry contained a Map
3. call writeJson(list) if the entry contained a List
*/
}
public String writeJson(List list, String json) {
// same comment as above
}
Если вы хотите свернуть свои собственные, то то, что вы пытаетесь сделать, возможно, даже для глубоко вложенных структур. Наш утилит был около 100 строк кода. Однако теперь для этого существуют хорошие сторонние библиотеки.
Обратите внимание, что в названии вашего вопроса вы упоминаете Map<String, String>
. Вам придется изменить его на что-то вроде Map<String, ?>
или Map<String, Collection>
, поскольку значения на карте определенно не могут быть ограничены строками.