Имеется минимальный json-файлик с конфигами:
{
"test": [
{
"micro": [
{
"attr": "1"
}
]
},
{
"macro": [
{
"attr2": "2"
},
{
"attr3": "3"
}
]
}
]
}
Этот файл скорее всего будет расширяться, но структура не будет изменяться. Есть серия вложенных циклов:
for (Object key : json.keySet())
{
JSONArray themeArray = ((JSONArray) json.get(key.toString()));
for (int i = 0; i < themeArray.length(); i++)
{
JSONObject langObject = (JSONObject) themeArray.get(i);
for(Object key2 : langObject.keySet())
{
JSONArray langArray = (JSONArray) langObject.get(key2.toString());
for(int j = 0; j < langArray.length(); j++)
{
JSONObject tagObject = (JSONObject) langArray.get(j);
for(Object key3 : tagObject.keySet())
{
tags.add(tagObject.get(key3.toString()));
}
}
}
}
Как по-вашему можно это сократить через рекурсию, чтобы на последнем шаге добавлялось в Set?
Как-то так
void parse(JSONObject json) {
for (Object key : json.keySet()) {
Object child = json.get(key.toString());
if (child instanceof JSONArray) {
JSONArray arr = (JSONArray) child;
for (int i = 0; i < arr.length(); i++) {
parse((JSONObject) arr.get(i));
}
} else {
tags.add(child);
}
}
}
Если вы хотите, чтобы метод возвращал коллекцию, то проще всего будет написать метод-обертку. А сам метод parse сделать приватным
public Set<Object> publicParse(JSONObject json) {
Set<Object> res = new HashSet<>;
parse(res, json);
return res;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я понимаю что в java "строгая типизация"Однако, если например я сделал множество приведений в коде и хочу вывести тип переменной в конце, как...
Начал изучать программирование и начал с языка Java и столкнулся с трудностью, поэтому прошу помощи