首先,对不起代码。它包含荷兰语单词
我在从JSON字符串中检索数据时遇到了麻烦。
考虑我要POST到我的webservice的这个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,但经过数小时的研究后,我仍然没有找到如何做到这一点。
你们中的任何人可以帮助我吗?
提前致谢。
答案 0 :(得分:2)
jsonLeerkracht
似乎是您的JsonObject
。它包含名为username
,passwoord
,voornaam
,achternaam
和klassen
的元素。它不包含名为id
的元素。因此您无法使用
jsonLeerkracht.getJsonNumber("id");
这是包含JSON对象的JSON数组,该对象具有id
元素作为JSON编号。
修改强>
像这样检索
for (int i = 0; i < jsonArray.size(); i++) {
JsonNumber number = jsonArray.getJsonObject(i).getJsonNumber("id");
}