java - 访问类型为 java.util.ArrayList 的 json 中的所有键

标签 java json gson

我编写了一个方法来告诉 JSON 的类型。 代码:

jsonObject.getClass().getName();

它返回java.util.ArrayList []或者它可以是com.google.gson.internal.LinkedTreeMap { }

现在我想从类型为 ArrayList 的 json 中检索所有键。这里我想将输入作为 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;"
    }
}}]   

所以现在我想检索像小部件、样式、大小、文本、图像等键。就像外键和内键一样。

最佳答案

您可以使用 Jackson 库中的 ObjectMapperGson 来迭代您的键。

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;
}

关于java - 访问类型为 java.util.ArrayList 的 json 中的所有键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59649780/

相关文章:

java - 如何查看java的堆和非堆内存使用情况遥测

java - solrj中的Document.addField和Document.setField有什么区别?

java - 如何使用hibernate ehcache缓存列表

javascript - Json 和 PHP 的奇怪问题

ruby-on-rails - 你如何处理 ActiveSupport::JSON 和 JSON gem 之间的冲突?

java - Jasperreport 中的位

c# - 我怎样才能 "pass through"来自 NEST Elasticsearch 查询的原始 json 响应?

java - GSON 解析与 Retrofit 解析 Flickr JSON 响应

java - 如何使用 Gson 将对象的 JSON 字符串转换为 ArrayList?

java - 我无法从嵌入 json 的数组中获取数据。使用改造和 GSON