我触发一个查询,结果来自JSON。我使用setters设置它。这是我的Dataclass:
private String userstory;
private String task;
private int actual;
private int estimate;
private String ref;
private String uid;
private String tid;
--setters--
这是我的主要课程:
for(JsonElement result : taskresponse.getResults())
{
JsonObject results = result.getAsJsonObject();
MyData myData = new MyData(results.get("WorkProduct").getAsJsonObject().get("Name").getAsString(),results.get("Name").getAsString(),
(int) Double.parseDouble(results.get("Actuals").getAsString()),
(int) Double.parseDouble(results.get("Estimate").getAsString()),
results.get("_ref").getAsString(),
results.get("WorkProduct").getAsJsonObject().get("FormattedID").getAsString(),results.get("FormattedID").getAsString());
data_list.add(myData);
}
当我在“Actuals”和“Estimate”字段中获得值int时,它运行良好。但有时我会从查询中得到值null。因此我获得了JSONNULLEXCEPTION。 我该如何处理这个异常。我最终希望在查询返回null时将字段设置为0。 感谢
答案 0 :(得分:0)
你可以使用这样的mod语句,如果值不为null,它将打印JSON响应,否则返回0
Double.parseDouble(results.get("Estimate") == null ? 0 : results.get("Estimates").getAsString(),
答案 1 :(得分:0)
这是在构造函数或方法中传递值的非常糟糕的样式。您应该始终先在局部变量中设置值,然后传递它。
检查以下解决方案
for(JsonElement result : taskresponse.getResults())
{
JsonObject results = result.getAsJsonObject();
private int tempActual = results.has("Actuals") ? results.get("Actuals") != null ? results.getInt("Actuals") : 0: 0;
private int tempEstimate = results.has("Estimate") ? results.get("Estimate") != null ? results.getInt("Estimate") : 0: 0;;
//You can use all variables like this
MyData myData = new MyData(results.get("WorkProduct").getAsJsonObject().get("Name").getAsString(),results.get("Name").getAsString(),tempActual,tempEstimate,
results.get("_ref").getAsString(),
results.get("WorkProduct").getAsJsonObject().get("FormattedID").getAsString(),results.get("FormattedID").getAsString());
data_list.add(myData);
}
答案 2 :(得分:0)
在拥有Dataclass时,您将创建另一个ArrayList Data Class,如
public class ListdataClass {
private ArrayList<Dataclass> listdata;
//getter and setter for listdata`
}
现在添加ObjectMapper Library以读取和写入Dataclass
中的Json数据ListDataClass listrecord=new ObjectMapper().readValue(taskresponse.getResults().toString(),ListdataClass.class);
现在你可以像
一样遍历Listrecord for(Dataclass val:listrecord){
//get any property value from val Object
//There cannot be nullPointerException
int estimate=val.getEstimate();
int actual=val.getActual();
//etc
//if json Object has empty value for any element then ObjectMapper will
// fill the default value for that element
}