【问题标题】:How do you set a value to null with com.google.gson.JsonObject in java?如何在 java 中使用 com.google.gson.JsonObject 将值设置为 null?
【发布时间】:2016-04-14 11:29:51
【问题描述】:

如何在 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

请注意,我使用的是 com.google.gson.JsonObject,这与此 SO 中其他帖子中的 How do you set a value to null with org.json.JSONObject in java? 等类似问题不同。

JSON:

[
  {
    "sun": 1122435343453,
    "mon": 1460538600000,
    "val": 45.900001525878906
  },
  {
    "sun": 1460538600000,
    "mon": 1460538660000,
    "val": 45.900001525878906
  }
  ]

【问题讨论】:

标签: java gson jsonobject


【解决方案1】:

你可以像这样使用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}

【讨论】:

  • 不错!我不知道。
【解决方案2】:

您需要使用serializeNulls()GsonBuilder。它使 Gson 能够序列化空字段。

编辑

GsonBuilder 的使用

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

Gson 用于将 Java 对象转换为 JSON 或从 JSON 转换。所以你需要创建一个Data Structureclass,这样你就可以创建一个对象并使用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);

【讨论】:

  • 您能举例说明GsonBuilder 的用法添加空值吗?我没有让它工作。
  • 不,我只使用gson的JsonObject。没有办法让 gson 对象放入 JsonObject。
  • @MyGod Gsons 主要用于将 java 对象与 json 进行转换。如果您不使用它,则不应使用 GSON 库本身。我再次编辑了我的答案。
  • 这就是我的解决方案。使用此设置,即使在自定义序列化程序内部,普通的 gson context.serialize(null) 也将返回 JsonNull.INSTANCE
  • 通知serializeNulls() 很重要,应该添加到接受的答案中。
【解决方案3】:

正如“生锈的大脑”所说,如果您使用 Gson gson = new GsonBuilder().serializeNulls().create();,当您将对象转换为 JSON 时,您将看到那些 null 字段。

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2012-03-08
    • 2021-03-13
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多