需要解决这个JSON Null异常

时间:2017-06-05 06:52:18

标签: java json

我触发一个查询,结果来自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。 感谢

3 个答案:

答案 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

    }