如何遍历数组中的数组?

Posted

技术标签:

【中文标题】如何遍历数组中的数组?【英文标题】:How to iterate through an array in an array? 【发布时间】:2022-01-21 09:03:15 【问题描述】:

我需要在 Java 中解析一个 JSON 字符串。我正在使用 JSONObject 来解析字符串并获取对象。我不知道如何在不知道键的情况下遍历三元组。

这是 JSON 作为字符串:

 "version": "0.8.0", "generator": "vzlogger", "data": [  "uuid": "d495a390-f747-11e0-b3ca-f7890e45c7b2", "last": 0, "interval": -1, "protocol": "s0" ,  "uuid": "a76ffbb0-5fcb-11ec-afdd-597654871263", "last": 1639902960610, "interval": 0, "protocol": "d0", "tuples": [ [ 1639902960610, 33067 ] ]  ] 

我需要遍历每个数据并为每个条目获取 uuid。我需要为每个 uuid 获取元组。例如

uuid a76ffbb0-5fcb-11ec-afdd-597654871263 
first tuples 1639902960610 
second tuples 33067
...

数组中有50个uuid,在上面的例子中我只复制了第一个。

这是我的代码:

JSONObject obj = http.getResponseJSON();
            
JSONArray arr = obj.getJSONArray("data"); // notice that `"posts": [...]`

for (int i = 0; i < arr.length(); i++)
    String uuid = arr.getJSONObject(i).getString("uuid");
    if (arr.getJSONObject(i).has("tuples")) 
        JSONArray tuples = arr.getJSONObject(i).getJSONArray("tuples");
        log.println("UUID: "+uuid + "CNT: "+tuples.length());
        for (int j = 0; j < arr.length(); j++)
            String tuple = tuples.getJSONObject(j).get ... HELP ... THERE IS NO KEY ....    
        
    

【问题讨论】:

使用getJSONArray(j) 代替getJSONObject(j)? 我怎样才能得到值“1639902960610”? tuples.getJSONArray(j).get ....?我没有键,在 json 中只定义了一个值 您使用getXXX(int),例如getLong(0) 来获取数组中的第一项。 【参考方案1】:

方法一:使用for循环: 这是最简单的,我们只需要使用一个 for 循环,其中一个计数器变量一个一个地访问每个元素。

导入 java.io.*; 类 GFG

public static void main(String args[]) throws IOException

    int ar[] =  1, 2, 3, 4, 5, 6, 7, 8 ;
    int i, x;

    // iterating over an array
    for (i = 0; i < ar.length; i++) 

        // accessing each element of array
        x = ar[i];
        System.out.print(x + " ");
    

方法 2 用于每个循环: 为每个循环优化代码,节省打字和时间。

导入 java.io.*; 类 GFG

public static void main(String args[]) throws IOException

    int ar[] =  1, 2, 3, 4, 5, 6, 7, 8 ;
    int x;

    // iterating over an array
    for (int i : ar) 

        // accessing each element of array
        x = i;
        System.out.print(x + " ");
    

【讨论】:

问题不在于 Array 的循环,而在于 JSONArray 的循环。您不能像普通数组一样访问 JSONArray。【参考方案2】:

您在元组字段中有嵌套数组。所以首先

    遍历外层数组 然后对于每个索引,遍历内部数组并直接打印值。

这是工作代码

            if (arr.getJSONObject(i).has("tuples")) 
                JSONArray outerTuples = arr.getJSONObject(i).getJSONArray("tuples");
                System.out.println("UUID: " + uuid);
                for (int k = 0; k < outerTuples.length(); k++) 
                    JSONArray innerTuples = outerTuples.getJSONArray(k);
                    for (int j = 0; j < innerTuples.length(); j++) 
                        System.out.println(innerTuples.get(j));
                    
                
            

【讨论】:

以上是关于如何遍历数组中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历数组中的数组?

java使用foreach语句遍历二维数组如何实现?

javascript如何遍历数组中的每一个元素

如何循环遍历数组并取消设置数组中的变量

javascript如何遍历数组中的每一个元素

python中如何遍历json数组