Доступ ко всем ключам из json, тип которых java .util.ArrayList - PullRequest
0 голосов
/ 08 января 2020

Я написал метод, который сообщает тип JSON. Код:

jsonObject.getClass().getName();

, который возвращает java.util.ArrayList [] или может быть com.google.gson.internal.LinkedTreeMap { }

Теперь я хочу получить все ключи из json, тип которого ArrayList. Здесь я хочу передать ввод как jsonobject, тип которого - arrayList.

Вот пример JSON, который я использую -

[{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "suni1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}]   

Так что теперь я хочу получить ключи, такие как виджет, стиль , размер, текст, изображение и т. д. c. Как внешние, так и внутренние ключи.

1 Ответ

0 голосов
/ 08 января 2020

Вы можете использовать ObjectMapper из библиотеки Джексона или Gson для перебора ваших ключей.

public static void main(String[] args) throws IOException{
    String s = "YOUR_JSON_HERE";

    ObjectMapper mapper = new ObjectMapper();
    List<Map<String, Object>> treeMap = mapper.readValue(s, List.class);
    //for Gson
    //Gson gson = new Gson();
    //List<Map<String, Object>> treeMap = gson.fromJson(s, List.class);

    List<String> keys  = new ArrayList<>();
    System.out.println(treeMap.stream().map( t -> findAllKeys(t,keys)).collect(Collectors.toList()));
}

private static List<String> findAllKeys(Map<String, Object> treeMap , List<String> keys) {
    treeMap.forEach((key, value) -> {
        if (value instanceof LinkedHashMap) {
            Map<String, Object> map = (LinkedHashMap) value;
            findAllKeys(map, keys);
        }
        keys.add(key);
    });

    return keys;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...