Java 获取jsonObject的最佳方法&x27;不存在的属性
我试图通过RESTAPI从JIRA收集数据 我可以用JSONObject获得一个jsonArray。这些JSONObject可能包含属性a;BCD一些JSONObject可能只包含例如a;Bc缺少属性d 我试图在代码中收集这些属性。由于某些JSONObject缺少某些属性,我可能会收到这样一条错误消息: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方法(如下
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);