首页 > 解决方案 > 将动态 json 文件解析为对象的 hashmap

问题描述

我已返回 json 如下列 A 、 B 、 C 、 D ,因为字符串表示我对 json 对象数组的键 注意:列是动态的,可以返回为 A 、 B 、 C 、 D 、 F 、 G 或 A、B 不'没有固定的形状:

在此处输入图像描述

我可以从 JSON 中检索这些数据,HashMap<String,String> 但是是否有任何方法可以将其List<Columns>作为columnsJSON 对象检索

标签: javaandroidjson

解决方案


在 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);

推荐阅读