Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java中的com.google.gson.JsonObject将值设置为null?_Java_Gson_Jsonobject - Fatal编程技术网

如何使用java中的com.google.gson.JsonObject将值设置为null?

如何使用java中的com.google.gson.JsonObject将值设置为null?,java,gson,jsonobject,Java,Gson,Jsonobject,如何使用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.addPro

如何使用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
,这与本文其他帖子中类似的问题不同

JSON:

[
  {
    "sun": 1122435343453,
    "mon": 1460538600000,
    "val": 45.900001525878906
  },
  {
    "sun": 1460538600000,
    "mon": 1460538660000,
    "val": 45.900001525878906
  }
  ]
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}

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

编辑

GsonBuilder的使用

Gson gson = new GsonBuilder()
     .serializeNulls()
     .create();
Gson用于将Java对象与JSON进行转换。因此,您需要创建一个
数据结构
或一个
,这样您就可以创建一个对象,并使用
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;
    }

}
公共类国家{
字符串名;
国际人口;
国家私人名单;
//getter和setter方法
公共字符串getName(){
返回名称;
    }
公共void集合名(字符串名){
this.name=名称;
    }
公共整数getPopulation(){
返回人口;
    }
公共人口(整数人口){
这个。人口=人口;
    }
公共列表getListOfStates(){
返回状态列表;
    }
public void setListOfStates(列表状态){
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);
Country countryObj=新国家();
countryObj.setName(“印度”);
countryObj.setPopulation(1000000);
List listOfStates=new ArrayList();
添加(“中央邦”);
添加(“马哈拉施特拉”);
添加(“拉贾斯坦邦”);
countryObj.setListOfStates(listOfStates);
Gson Gson=new GsonBuilder()
.nulls()
.create();
//将java对象转换为JSON格式,
//并以JSON格式的字符串返回
字符串json=gson.toJson(countryObj);

您可以像这样使用
com.google.gson.JsonNull.INSTANCE

JsonObject jsonObj = ...
jsonObj.add("val", JsonNull.INSTANCE); 
或者,如果您想从序列化中完全删除值

jsonObj.remove("val");
演示:

[
  {
    "sun": 1122435343453,
    "mon": 1460538600000,
    "val": 45.900001525878906
  },
  {
    "sun": 1460538600000,
    "mon": 1460538660000,
    "val": 45.900001525878906
  }
  ]
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}

尝试使用JSONObject.NULL而不是“NULL”?我不确定我的标志(重复)是否为false,删除了注释以防万一(希望恢复标志)。你已经试过了吗?@MyGod我找到了一个相关链接,你能告诉我如何使用
GsonBuilder
添加空值吗?我没有让它工作。不,我只使用gson的JsonObject。无法将gson对象放入JsonObject。@MyGod gson主要用于将java对象转换为json或从json转换为java对象。如果您没有使用它,就不应该使用GSON库本身。我再次编辑了我的答案。这是我的解决方案。使用此设置,即使在自定义序列化程序中,普通的gson
context.serialize(null)
也会返回JsonNull.instance注意事项
serializeNulls()
很重要,应该添加到接受的答案中。很好!我不知道。