首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >试图通过迭代JSONArray来填充数组时的Java - ArrayIndexOutofBoundsException

试图通过迭代JSONArray来填充数组时的Java - ArrayIndexOutofBoundsException
EN

Stack Overflow用户
提问于 2018-06-13 15:45:46
回答 3查看 172关注 0票数 0

我正在尝试通过迭代JSONArray来填充serveritemsId

代码语言:javascript
复制
String jsonString = '"[{\"label\":\"Label 1\",\"srvid\":1},{\"label\":\"label 2\",\"srvid\":2}]"';

String[] servers = new String[100];
Integer itemsId[] = new Integer[100];
try {
    JSONArray array = new JSONArray(jsonString);
    for (int i = 0; i < array.length(); i++) {
        JSONObject o = array.getJSONObject(i);
        servers[i] = o.getString("label");
        itemsId[i] = o.getInt("srvid");
    }
} catch (JSONException e) {
    e.printStackTrace();
} catch(Exception e) {
    e.printStackTrace();
}

然而,我在这里得到了ArrayIndexOutOfBoundsException,但我不知道如何进一步解决这个问题。我想知道在数组的声明中可能有什么错误,以及它们是如何填充的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-15 09:02:44

所以我所做的是,我通过JSONArray的大小初始化了数组的长度。把他们带进了试捕区。

代码语言:javascript
复制
try {
    JSONArray array = new JSONArray(jsonString);
    String[] servers = new String[array.length()];
    Integer[] itemsId = new Integer[array.length()];
    for (int i = 0; i < array.length(); i++) {
        JSONObject o = array.getJSONObject(i);
        servers[i] = o.getString("label");
        itemsId[i] = o.getInt("srvid");
    }

    //REST OF THE CODES
} catch (JSONException e) {
    e.printStackTrace();
} catch(Exception e) {
    e.printStackTrace();
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-13 16:23:47

我在这里看到的唯一问题是将JSON字符串括起来的单引号。除此之外,代码在Intellij IDEA 2018.1.3中可以完美地工作。

代码语言:javascript
复制
String jsonString = "[{\"label\":\"Label 1\",\"srvid\":1},{\"label\":\"label 2\",\"srvid\":2}]";

String[] servers = new String[100];
Integer itemsId[] = new Integer[100];
try {
    JSONArray array = new JSONArray(jsonString);
    for (int i = 0; i < array.length(); i++) {
        JSONObject o = array.getJSONObject(i);
        servers[i] = o.getString("label");
        itemsId[i] = o.getInt("srvid");
    }
    System.out.println(Arrays.toString(servers)); //Added for testing purposes
    System.out.println(Arrays.toString(itemsId)); //Added for testing purposes
} catch (JSONException e) {
    e.printStackTrace();
} catch(Exception e) {
    e.printStackTrace();
}

这两个System.out.println(Arrays.toString(arr))调用给出了预期的输出。没问题。

票数 1
EN

Stack Overflow用户

发布于 2018-06-13 16:01:08

我执行了下面的代码,它是您的副本(更改了jsonString)。

代码语言:javascript
复制
String jsonString = "[{'label':'Label 1','srvid':1},{'label':'label 2','srvid':2}]";

        String[] servers = new String[100];
        Integer itemsId[] = new Integer[100];
        try {
            JSONArray array = new JSONArray(jsonString);
            for (int i = 0; i < array.length(); i++) {
                JSONObject o = array.getJSONObject(i);
                servers[i] = o.getString("label");
                System.out.println(servers[i]);
                itemsId[i] = o.getInt("srvid");
                System.out.println(itemsId[i]);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        } catch(Exception e) {
            e.printStackTrace();
        }

并得到了回应。

代码语言:javascript
复制
Label 1
1
label 2
2

因此,如果JSON字符串没有任何问题,代码看起来很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50831716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档