私は次のようなクラスを持っています、
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文字列を作成するにはどうすればよいですか。
どんな助けも高く評価されます。
ありがとう。
より良いのは、次のような@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文字列が返されます。
Gsonを使用してjsonツリーを探索できます。
このようなものを試してください:
gson.toJsonTree(stu1).getAsJsonObject().remove("id");
いくつかのプロパティを追加することもできます:
gson.toJsonTree(stu2).getAsJsonObject().addProperty("id", "100");
2つのオプションがあります。
Javaの一時的なキーワードを使用します。これは、フィールドをシリアル化しないことを示すためのものです。 Gsonは自動的に除外します。条件に応じてこれが機能しない場合があります。
必要なフィールドに@Exposeアノテーションを使用し、Gson Builderを次のように初期化します。
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
したがって、@ Exposeを使用して名前フィールドと年齢フィールドをマークする必要があり、すべてのフィールドを含むデフォルトと、@Expose
アノテーションのないフィールドを除外する上記の2つの異なるGsonインスタンスが必要です。
JsonObject jsObj = (JsonObject) new Gson().toJsonTree(stu2);
jsObj.remove("age"); // remove field 'age'
jsObj.addProperty("key", "value"); // add field 'key'
System.out.println(jsObj);
JsonObjectで操作できます
Student
シリアル化ポリシーについてGSON
に気付くid
クラスに追加のフィールドを導入する必要があります。次に、TypeAdapter
を実装するカスタムシリアライザーを実装する必要があります。 idシリアル化ポリシーに従ったTypeAdapter
実装では、シリアル化するかどうかを決定します。次に、TypeAdapter
をGSONファクトリーに登録する必要があります。
GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(Student.class, new StudentTypeAdapter());
お役に立てれば。