java - 将动态 json 文件解析为对象的 hashmap
问题描述
我已返回 json 如下列 A 、 B 、 C 、 D ,因为字符串表示我对 json 对象数组的键 注意:列是动态的,可以返回为 A 、 B 、 C 、 D 、 F 、 G 或 A、B 不'没有固定的形状:
我可以从 JSON 中检索这些数据,HashMap<String,String>
但是是否有任何方法可以将其List<Columns>
作为columns
JSON 对象检索
解决方案
在 kotlin 中,这可以使用一行映射表达式来实现。我已经为您将其移植到 Java 中。该代码打印一个 HashMap,其中包含分配给列名称的对象列表。
JSONObject obj = new JSONObject("{\"columns\":[\"A\",\"B\",\"C\"],\"data\":[{\"A\":\"1test1\",\"B\":\"1test2\",\"C\":\"1test3\"},{\"A\":\"2test1\",\"B\":\"2test2\",\"C\":\"2test3\"},{\"A\":\"3test1\",\"B\":\"3test2\",\"C\":\"3test3\"}]}");
JSONArray cols = obj.getJSONArray("columns");
JSONArray data = obj.getJSONArray("data");
HashMap<String, ArrayList<Object>> columnsMap = new HashMap<>();
for (Object column : cols) {
ArrayList<Object> columnList = new ArrayList<>(data.length());
for (Object j : data) {
JSONObject rowObject = (JSONObject) j;
columnList.add(rowObject.get((String) column));
}
columnsMap.put((String) column, columnList);
}
System.out.println(columnsMap);
推荐阅读
- c# - 如何像 C++ 一样在 C# 中初始化
- symfony - Doctrine ORM:使用更新级联选项手动添加 fk 来验证模式
- android - 所有 WebView 都以某种方式共享访问历史记录
- c# - 使用gamesparks RTDataBuilder发送字符串,如果索引大于128就会出现IndexOutOfRange异常
- javascript - 加载 gapi 后加载 Angular 5 组件
- python-2.7 - 如何验证 Python(网页)中的字体大小和颜色?
- javascript - 单击按钮两次处理其他组件中的 ngIf 语句
- python - Python数据加密
- javascript - 角度材质对话框未打开
- laravel - Laravel 数据库关系