Java 获取jsonObject的最佳方法&x27;不存在的属性

Java 获取jsonObject的最佳方法&x27;不存在的属性,java,json,jira-rest-api,Java,Json,Jira Rest Api,我试图通过RESTAPI从JIRA收集数据 我可以用JSONObject获得一个jsonArray。这些JSONObject可能包含属性a;BCD一些JSONObject可能只包含例如a;Bc缺少属性d 我试图在代码中收集这些属性。由于某些JSONObject缺少某些属性,我可能会收到这样一条错误消息: Exception in thread "main" org.json.JSONException: JSONObject["d"] not found. 我使用了try/catch方法(如下

我试图通过RESTAPI从JIRA收集数据

我可以用JSONObject获得一个jsonArray。这些JSONObject可能包含属性a;BCD一些JSONObject可能只包含例如a;Bc缺少属性d

我试图在代码中收集这些属性。由于某些JSONObject缺少某些属性,我可能会收到这样一条错误消息:

Exception in thread "main" org.json.JSONException: JSONObject["d"] not found.
我使用了try/catch方法(如下所示),因此我通过忽略它来避免错误消息

有没有更好的方法来解决这样的问题

JsonNode jsonNode = response.getBody();
JSONArray jsonArray = jsonNode.getArray();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = (String) jsonObject.get("name");
String startDate = (String) jsonObject.get("startDate");
String releaseDate = (String) jsonObject.get("releaseDate");
Integer projectId = (Integer) jsonObject.get("projectId");
String description;
// getting the error for the attribute description
try {
    description = (String) jsonObject.get("description");
} catch (Exception e) {
    description = "";
}
JsonNode JsonNode=response.getBody();
JSONArray JSONArray=jsonNode.getArray();
for(int i=0;i
创建一个
自定义对象
并将
json字符串
反序列化到该对象的实例中。下面我将展示使用
gson
库的解决方案

Maven依赖关系

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>
然后您可以将JSON字符串反序列化到模型类中,如下所示

String json = "{\"archived\":false,\"releaseDate\":\"2019-07-16\",\"name\":\"test 1.0\",\"self\":\"https://test/rest/api/latest/test/10000\",\"userReleaseDate\":\"16/Jul/19\",\"id\":\"10000\",\"projectId\":10000,\"released\":true}";
Gson gson = new GsonBuilder().create();
Model model = gson.fromJson(json, Model.class);

这样,您就不必每次单独检查每个参数以将其分配给相应的成员变量。

为什么不使用JSON的成员变量创建一个
自定义对象
,以便
将JSON反序列化为
自定义对象
,然后只需检查
description
成员变量为
null
或nor@NickAth谢谢你的输入。我不知道这样的事情是可能的。干杯。你能在你的问题中加入你收到的
json样本吗?
正在使用
gson
库?@NickAth
{“存档”:false,“releaseDate”:“2019-07-16”,“name”:“测试1.0”,“self”:"https://test/rest/api/latest/test/10000“,“userReleaseDate”:“16/Jul/19”,“id”:“10000”,“projectId”:10000,“released”:true}
这是我通过API调用从JIRA获得的json。我使用的类有以下
JsonNode JsonNode=response.getBody();
JSONArray JSONArray=JsonNode.getArray()使用以下库
导入org.json.JSONArray;
导入org.json.JSONObject;
检查下面的答案:)
String json = "{\"archived\":false,\"releaseDate\":\"2019-07-16\",\"name\":\"test 1.0\",\"self\":\"https://test/rest/api/latest/test/10000\",\"userReleaseDate\":\"16/Jul/19\",\"id\":\"10000\",\"projectId\":10000,\"released\":true}";
Gson gson = new GsonBuilder().create();
Model model = gson.fromJson(json, Model.class);