首先,对不起代码。它包含荷兰语单词

我在从JSON字符串检索数据时遇到麻烦。

考虑一下我要发布到Web服务的JSON字符串:

{ "username" : "johndoe", "passwoord" : "password", "voornaam":"John", "achternaam":"Doe", "klassen" : [{ "id" : 1 }, { "id" : 2 }, { "id" : 3 }] }


我有一个Leerkracht班(老师)和一个Klas班(这也被称为英语班,这可能会引起一些混乱,因此我将其称为年级)。
每个老师可以分多个年级任教,每个年级可以有多个老师。
这被映射为多对多关系。

现在,当我想用​​POST方法添加一名老师时,我希望能够发送他必须使用的教学成绩。这是JSON字符串中的"klassen" : [{ "id" : 1 }, { "id" : 2 }, { "id" : 3 }]部分。

成绩由ID标识。因此,我希望能够使用相同的JSON字符串与老师发送成绩。

一切顺利,除非我想读取这些ID。

我使用JsonReader和JsonObject(来自Java EE 7)读取我的JSON字符串。

这是我要读取数组klassen并获取每个单独ID并将其存储在Klas类的实例中的部分。

JsonReader reader = Json.createReader(entityStream);
JsonObject jsonLeerkracht = reader.readObject();
List<Klas> klassen = new ArrayList<Klas>();
Klas klas = new Klas();

JsonArray jsonArray = jsonLeerkracht.getJsonArray("klassen");
for (int i = 0; i < jsonArray.size(); i++) {
    JsonNumber jsonId = jsonLeerkracht.getJsonNumber("id");
    if (jsonId != null) {
        int id = jsonId.intValue();
    }
    klassen.add(klas);
}


一切顺利,直到我想从数组中获取id
当我用jsonArray显示System.out.println(jsonArray)时,我得到了:

[{"id":1},{"id":2},{"id":3}]


因此,我认为这很好。它存储了一个不错的JSON字符串。

接下来,当我使用System.out.println(jsonArray.get(i))时,它将向我显示每个单独的id

{"id":1}
{"id":2}
{"id":3}


这样也像魅力一样起作用。

但是以某种方式,我无法检索存储在JSON字符串的id部分中的int。

JsonNumber jsonId = jsonLeerkracht.getJsonNumber("id");应该这样做,但是会抛出NullPointerException

我认为JsonNumber jsonId = jsonLeerkracht.getJsonNumber("id");并未指向JSON字符串中的id,但是经过数小时的研究,我仍然没有找到如何做到这一点。

你们可以帮我这个忙吗?

提前致谢。

最佳答案

jsonLeerkracht似乎是您的JsonObject。它包含名为usernamepasswoordvoornaamachternaamklassen的元素。它不包含名为id的元素。因此,您无法使用

jsonLeerkracht.getJsonNumber("id");


这是包含JSON对象的JSON数组,该JSON对象的id元素是JSON编号。

编辑

像这样检索

for (int i = 0; i < jsonArray.size(); i++) {
    JsonNumber number = jsonArray.getJsonObject(i).getJsonNumber("id");
}

10-01 02:50
查看更多