我有一些json,其中包含一系列看起来像这样的条目(我将其简化为专注于相关问题,这就是为什么它看起来有点多余的原因):

{“名称”:“ISPC塞舌尔”,“公司”:{“名称”:“ISPC
塞舌尔”,“id”:3427640}}

但是有时公司属性设置为null:

{“名称”:“京都威斯汀都饭店”,“公司”:空}

我已经定义了这样的类(对公共(public)访问修饰符很抱歉,当我使这段代码起作用时,这些类将更改:)):

class Entry {
  public String name=;
  public Company company;
  public String toString() {
      return  name + ";" + company;
  }
}

class Company {
    public String name;
    public int id;
    public String toString() {
        return "Company: " + name;
    }
}

在我的代码中,我尝试使用gson反序列化包含在名为output的变量中的JSON:
while ((output = br.readLine()) != null) {
    Gson gson = new Gson();
    Reply reply = gson.fromJson(output, Reply.class);
    Entry[] entries = reply.entries;
    for (int i=0; i < entries.length; i++) {
        System.out.print(entries[i]+ "\n") ;
    }
}

如在JSON中的第一个示例中那样填充company元素时,这可以很好地工作:

塞舌尔ISPC;公司:塞舌尔ISPC

但是,如果不像第二个示例那样填充该元素,则会得到以下输出:

京都威斯汀都饭店;空值

我想要的是以下输出:

京都威斯汀都饭店;公司:null

最佳答案

toString()Company表示形式由Company对象控制,因此如果Company对象为null,则无法获得所需的表示形式。唯一的方法是在Entry类的toString()中包含以下内容:

class Entry {
  ...
  ...

    public String toString() {
        return  name + "; " + (company != null ? company : "Company: null");
    }
}

09-20 15:53