3

次のような一連のエントリを持つjsonがあります(関連する問題に焦点を当てるために単純化したため、少し冗長に見えます):

{"名前":"ISPC セーシェル","会社":{"名前":"ISPC セーシェル","id":3427640}}

ただし、会社のプロパティが null に設定されている場合もあります。

{"name":"ウェスティン都ホテル京都", "company":null}

私は自分のクラスを次のように定義しました (パブリック アクセス修飾子については申し訳ありませんが、このコードが機能するようになったらこれらを変更します :)) :

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;
    }
}

私のコードでは、出力と呼ばれる変数に含まれる JSON を逆シリアル化するために gson を使用しようとしています。

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 セーシェル

ただし、2 番目の例のように要素が設定されていない場合は、次の出力が得られます。

ウェスティン都ホテル京都; ヌル

私が望むのは、次の出力です。

ウェスティン都ホテル京都; 会社: null

4

1 に答える 1

0

toString()表現はオブジェクトCompanyによって制御されるため、オブジェクトが nullCompanyの場合、必要な表現を取得する方法はありません。それを行う唯一の方法は、クラスCompanyに次のようなものを含めることです。EntrytoString()

class Entry {
  ...
  ...

    public String toString() {
        return  name + "; " + (company != null ? company : "Company: null");
    }
}
于 2012-09-06T20:37:12.347 に答える