使用 GSON 创建 JSON 字符串

2022-09-02 20:32:38

我有一个像下面这样的课程,

public class Student {
    public int id;
    public String name;
    public int age;    
}

现在我想创建新的学生,

//while create new student
Student stu = new Student();
stu.age = 25;
stu.name = "Guna";
System.out.println(new Gson().toJson(stu));

这给了我以下输出,

{"id":0,"name":"Guna","age":25} //Here I want string without id, So this is wrong

所以在这里我想要字符串像

{"name":"Guna","age":25}

如果我想编辑老学生

//While edit old student
Student stu2 = new Student();
stu2.id = 1002;
stu2.age = 25;
stu2.name = "Guna";
System.out.println(new Gson().toJson(stu2));

现在输出是

{"id":1002,"name":"Guna","age":25} //Here I want the String with Id, So this is correct

我如何制作一个带有字段的JSON字符串[在某些时候],而没有字段[在某些时候]。

任何帮助都将是非常可观的。

谢谢。


答案 1

更好的是使用@expose注释,如

public class Student {
    public int id;
    @Expose
    public String name;
    @Expose
    public int age;
}

并使用下面的方法从对象中获取Json字符串

private String getJsonString(Student student) {
    // Before converting to GSON check value of id
    Gson gson = null;
    if (student.id == 0) {
        gson = new GsonBuilder()
        .excludeFieldsWithoutExposeAnnotation()
        .create();
    } else {
        gson = new Gson();
    }
    return gson.toJson(student);
}

如果将其设置为 0,它将忽略 id 列,它将返回带有 id 字段的 json 字符串。


答案 2

您可以使用gson浏览json树。

试试这样的东西:

gson.toJsonTree(stu1).getAsJsonObject().remove("id");

您也可以添加一些属性:

gson.toJsonTree(stu2).getAsJsonObject().addProperty("id", "100");