java - 访问类型为 java.util.ArrayList 的 json 中的所有键
问题描述
我写了一个告诉 JSON 类型的方法。代码:
jsonObject.getClass().getName();
哪个返回java.util.ArrayList []
或者它可以是com.google.gson.internal.LinkedTreeMap { }
现在我想从类型为 .json 的 json 中检索所有键ArrayList
。在这里,我想将输入作为类型为 arrayList 的 jsonobject 传递。
这是我正在使用的示例 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;"
}
}}]
所以现在我想检索小部件、样式、大小、文本、图像等键。像外键和内键一样。
解决方案
您可以ObjectMapper
从 Jackson 库中使用或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;
}
推荐阅读
- jmeter - 无法通过 jmeter 中的 CSV 数据集配置读取多行,仅读取 csv 文件中的第二个
- binary - 在 3 个变量真值表中得到 000 的 2s 恭维后忽略 1
- c++ - 无法更新变量的值
- yaml - 在 Snakemake 管道中使用所有已安装的 conda 依赖项版本创建文本文件
- terraform - 如何引用 Terraform 代码中的次要范围?
- android - Android createScaledBitmap 缩小时会导致断线
- java - 如何使用 Netty 连接到 docker.sock?
- ios - 无法看懂哨兵异常报告
- sql - 不跨越多行的条目的 SQL 查询
- c - ASCII 转换成字符