【问题标题】:Add ArrayList to another ArrayList dynamically is treading values动态地将 ArrayList 添加到另一个 ArrayList 是踩值
【发布时间】:2021-04-15 15:57:39
【问题描述】:
{
   "clientes":[
      {
         "codigo":"1341",
         "empresa":0,
         "nombre":"asd",
         "e_mail":"cli@cli.com"
      },
      {
         "codigo":"5435",
         "empresa":0,
         "nombre":"asd",
         "e_mail":"cli@cli.com"
      }
   ]
}

我正在尝试从 json 中提取键和值,然后将所有键放入一个数组中,并将所有值放入另一个数组中。现在的问题是可以来多个客户端,所以我必须制作一个键数组列表和一个值数组列表

如您所见,在输出中,位置 [0] 的值与位置 [1] 的值相同,并且不应该是这样,因为在“codigo”字段中我发送了不同的值..

ArrayList listArrayKeys = new ArrayList();
ArrayList listArrayValues = new ArrayList();
ArrayList<String> arrayKeys = new ArrayList<>();
ArrayList<String> arrayValues = new ArrayList<>();
DatabaseHelper databaseHelper = new DatabaseHelper(this);
JSONObject jsonObject;
String tableName;

void getKeysAndValues() throws JSONException {
try {
    Iterator<String> keys = jsonObject.keys();
    while(keys.hasNext()) {
        String key = keys.next();
        System.out.println(key);
        if(jsonObject.get(key) instanceof JSONArray) {
            JSONArray array = (JSONArray) jsonObject.get(key);
            for(int i = 0; i < array.length(); i++){
                JSONObject object = (JSONObject) array.get(i);
                Iterator<String> innerKeys = object.keys();
                arrayValues.clear();
                while(innerKeys.hasNext()) {
                    String innerKey = innerKeys.next();
                    String innerValue = object.getString(innerKey);
                    arrayKeys.add(innerKey);
                    arrayValues.add(innerValue);
                    System.out.println(innerKey);
                }
                listArrayKeys.add(arrayKeys);
                listArrayValues.add(arrayValues);
            }
            Log.d("ARRAYVALUES", String.valueOf(listArrayValues));
        }
    }

} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

输出:

[[5435, 0, asd, cli@cli.com], [5435, 0, asd, cli@cli.com]

应该是:

[[1341, 0, asd, cli@cli.com], [5435, 0, asd, cli@cli.com]

【问题讨论】:

    标签: java android json for-loop


    【解决方案1】:

    我认为这只是用新数组替换 array.clear() 的问题。这样,您将根据需要向两个数组添加键

        while(keys.hasNext()) {
            String key = keys.next();
            System.out.println(key);
            if(jsonObject.get(key) instanceof JSONArray) {
                JSONArray array = (JSONArray) jsonObject.get(key);
                for(int i = 0; i < array.length(); i++){
                    JSONObject object = (JSONObject) array.get(i);
                    Iterator<String> innerKeys = object.keys();
    //                arrayValues.clear();
                    arrayValues = new ArrayList<>();
                    while(innerKeys.hasNext()) {
                        String innerKey = innerKeys.next();
                        String innerValue = object.getString(innerKey);
                        arrayKeys.add(innerKey);
                        arrayValues.add(innerValue);
                        System.out.println(innerKey);
                    }
                    listArrayKeys.add(arrayKeys);
                    listArrayValues.add(arrayValues);
                }
                Log.d("ARRAYVALUES", String.valueOf(listArrayValues));
            }
        }
    

    【讨论】:

    • 仅此而已!我是一名实习程序员,在实际实践中,你需要其他人(比如你)知道并具体告诉你是什么导致了问题,因为我花了几个小时尝试但不知道那是错误。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-01-11
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多