web-dev-qa-db-ja.com

Javaのcom.google.gson.JsonObjectで値をnullに設定するにはどうすればよいですか?

Javaでcom.google.gson.JsonObjectを使用して値をnullに設定するにはどうすればよいですか? isNullを使用すると、値がnullかどうかを確実に読み取ることができますが、nullを入力すると、無視されるように見えます。

JSONObject jsonObj = new JSONObject();
jsonobjToEra.addProperty("Sun", Double.parseDouble(val));
jsonobjToEra.addProperty("mon", 22.333);
jsonobjToEra.addProperty("val", null); //ignoring it

このSOの他の投稿では、 javaのorg.json.JSONObjectで値をnullに設定するにはどうすればよいですか? のような同様の質問とは異なるcom.google.gson.JsonObjectを使用していることに注意してください。

JSON:

[
  {
    "Sun": 1122435343453,
    "mon": 1460538600000,
    "val": 45.900001525878906
  },
  {
    "Sun": 1460538600000,
    "mon": 1460538660000,
    "val": 45.900001525878906
  }
  ]
9
My God

次のようにcom.google.gson.JsonNull.INSTANCEを使用できます。

JsonObject jsonObj = ...
jsonObj.add("val", JsonNull.INSTANCE); 

または、シリアル化から値を完全に削除したい場合

jsonObj.remove("val");

デモ:

String json = "{\"a\": 1, \"b\": 1}";
JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);

System.out.println(jsonObject); // {"a":1,"b":1}

jsonObject.addProperty("a", 2);
jsonObject.add("b", JsonNull.INSTANCE);
System.out.println(jsonObject); // {"a":2,"b":null}

jsonObject.remove("a");
System.out.println(jsonObject); // {"b":null}
9
varren

GsonBuilderserializeNulls()を使用する必要があります。これにより、Gsonはnullフィールドをシリアル化できます。

詳細については、 ここ および ここ を参照してください。

[〜#〜]編集[〜#〜]

GsonBuilderの使用法(From 公式ドキュメント

Gson gson = new GsonBuilder()
     .serializeNulls()
     .create();

Gsonは、JavaオブジェクトをJSONとの間で変換するために作成されています。したがって、そのオブジェクトを作成できるように、Data Structureまたはclassを作成する必要があります。オブジェクト全体をnullでjsonに変換します。

この例を参照してください

public class Country {

    String name;
    int population;
    private List<String> listOfStates;

    //getter and setter methods

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPopulation() {
        return population;
    }

    public void setPopulation(int population) {
        this.population = population;
    }

    public List<String> getListOfStates() {
        return listOfStates;
    }

    public void setListOfStates(List<String> listOfStates) {
        this.listOfStates = listOfStates;
    }

}

そしてあなたがそれを使うとき:

Country countryObj=new Country();
  countryObj.setName("India");
  countryObj.setPopulation(1000000);
  List<String> listOfStates=new ArrayList<String>();
  listOfStates.add("Madhya Pradesh");
  listOfStates.add("Maharastra");
  listOfStates.add("Rajasthan");

  countryObj.setListOfStates(listOfStates);
  Gson gson = new GsonBuilder()
     .serializeNulls()
     .create();

  // convert Java object to JSON format,
  // and returned as JSON formatted string
  String json = gson.toJson(countryObj);
10
rusted brain