首先,对不起代码。它包含荷兰语单词
我在从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
。它包含名为username
,passwoord
,voornaam
,achternaam
和klassen
的元素。它不包含名为id
的元素。因此,您无法使用
jsonLeerkracht.getJsonNumber("id");
这是包含JSON对象的JSON数组,该JSON对象的
id
元素是JSON编号。编辑
像这样检索
for (int i = 0; i < jsonArray.size(); i++) {
JsonNumber number = jsonArray.getJsonObject(i).getJsonNumber("id");
}