将MAPS加载到LIST中 - 覆盖值

时间:2018-02-04 02:31:12

标签: java arrays list

下面的代码是一个字符串(恰好是JSON) - 将其转换为JSONObject,然后迭代数据。 JSON具有模式(列)和数据。我的最终目标是将每个项目链接起来然后放入地图。

当每个项目不同时,这非常有效,如下所示:

String jsonSTR = "{\"schema\":[\"col1\",\"col2\",\"col3\"],\"data\":[[\"banana\",\"1\",face],[\"orange\",\"2\",\"foot\"],[\"apple\",\"3\",\"hand\"]]}"; 

输出

{banana=col1, orange=col1, 1=col2, apple=col1, face=col3, 2=col2, 3=col2, foot=col3, hand=col3}

但引入了第二个重复项(包含在下面的代码中)我最终覆盖了值。我尝试将输入的值切换到列表中,但存在同样的问题。

我要么使用错误的容器来保存这些数据,要么我错误地使用它们。我认为LISTS可能会重复。

这是我目前的代码:

import org.json.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Main {

    public static void main(String[] args) {

        ArrayList<String> schemaList = new ArrayList<>();
        List<Map<String, Object>> allData = new ArrayList<Map<String, Object>>();
        Map<String,Object> partData = new HashMap<String, Object>();

        String jsonSTR = "{\"schema\":[\"col1\",\"col2\",\"col3\"],\"data\":[[\"banana\",\"orange\",2],[\"face\",\"arm\",\"eye\"],[\"yes\",\"no\",\"no\"]]}";
        JSONObject jsonObj = new JSONObject(jsonSTR);


        //Getting schema
        JSONArray schema = jsonObj.getJSONArray("schema");
        for (int i = 0; i < schema.length(); i++)
        {
            schemaList.add(schema.get(i).toString());
        }

        //Getting data
        JSONArray data = jsonObj.getJSONArray("data");

        for (int j = 0; j < data.length(); j++)
        {
            JSONArray row = data.getJSONArray(j);
            for (int k = 0; k < row.length(); k++)
            {
                partData.put(schema.get(k).toString(),row.get(k));
                allData.add(partData);
            }
        }

        System.out.println(allData.get(0));
        System.out.println(allData.get(1));

    }
}

1 个答案:

答案 0 :(得分:0)

如果数据必须在带有密钥的地图中,那么任何列都不能重复数据,因此它不是最佳解决方案。

public static Map<String, List<String>> toMap(String jsonSTR) {

    Map<String, List<String>> result = new HashMap<>();
    JSONObject jsonObj = new JSONObject(jsonSTR);

    JSONArray schema = jsonObj.getJSONArray("schema");
    JSONArray data = jsonObj.getJSONArray("data");

    for (int i = 0; i < schema.length(); i++) {

        String key = schema.get(i).toString();
        result.put(key, new ArrayList<>());

        for (int j = 0; j < data.length(); j++)
            result.get(key).add(((JSONArray)data.get(j)).get(i).toString());

    }
    return result;
}

在:
&#34; {\&#34;模式\&#34;:[\&#34; COL1 \&#34; \&#34; COL2 \&#34; \&#34; COL3 \& #34; \&#34; COL4 \&#34],\&#34;数据\&#34;:[[\&#34;香蕉\&#34; \&#34; 1 \ &#34; \&#34;面\&#34; \&#34;黑色\&#34],[\&#34;橙\&#34; \&#34; 2 \ &#34; \&#34;脚\&#34; \&#34;红色\&#34],[\&#34;苹果\&#34; \&#34; 3 \ &#34; \&#34;手\&#34; \&#34;黄色\&#34;]]}&#34;

输出:
{col4 = [黑色,红色,黄色],col2 = [1,2,3],col3 = [面部,脚部,手部],col1 = [香蕉,橙,苹果]}

您对此解决方案有何看法?