如何遍历数组中的数组?
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));
【讨论】:
以上是关于如何遍历数组中的数组?的主要内容,如果未能解决你的问题,请参考以下文章