在 JAVA 中的 JSON 反序列化期间更改两个字段名称
Changing two filed names during JSON deserialization in JAVA
我有一个 json 文件
{"apple" : [
{
"first" : 3,
"second" : 5,
}
],
"orange" : [
{
"fst" : 7,
"snd" : 8,
}
],
}
用于反序列化的助手class
public class Helper {
private int num1;
private int num2;
public Helper(Helper other) {
this.num1 = other.num1;
this.num2 = other.num2;
}
public int getNum1() {
return this.num1;
}
public int getNum2() {
return this.num2;
}
}
A java class 用于反序列化,我需要更改 JSON 键以与 Helper
class 的实例名称兼容。
public class MyDesClass {
@SerializedName(value = "apple.first", alternate = "apple.num1")
@SerializedName(value = "apple.seconds", alternate = "apple.num2")
private final Helper[] apple;
public MyDesClass(Helper[] apple) {
this.apple = apple;
}
}
而且,也在 main.java 里面,我有:
/* .... */
Reader f = new FileReader( PATH_TO_THE_JSON_FILE);
Gson gson = new Gson();
GameBoard gameBoard = gson.fromJson(f, MyDesClass.class);
/* .... */
我的问题是如何在 MyDesClass
?目前,我收到 SerializedName is not a repeatable annotation type
错误。
您需要在 Helper class 中使用 @SerializedName
(并根据需要更新 MyDesClass
):
public class Helper {
@SerializedName(value = "first" alternate={"num1","fst"})
private int num1;
@SerializedName(value = "second" alternate={"num2","snd"})
private int num2;
public Helper(Helper other) {
this.num1 = other.num1;
this.num2 = other.num2;
}
public int getNum1() {
return this.num1;
}
public int getNum2() {
return this.num2;
}
}
为了符合更新后的 JSON,MyDesClass
需要有另一个字段 orange
:
public class MyDesClass {
@SerializedName("apple")
private final Helper[] apple;
@SerializedName("orange")
private final Helper[] orange;
public MyDesClass(Helper[] apple, Helper[] orange) {
this.apple = apple;
this.orange = orange;
}
// ...
}
我有一个 json 文件
{"apple" : [
{
"first" : 3,
"second" : 5,
}
],
"orange" : [
{
"fst" : 7,
"snd" : 8,
}
],
}
用于反序列化的助手class
public class Helper {
private int num1;
private int num2;
public Helper(Helper other) {
this.num1 = other.num1;
this.num2 = other.num2;
}
public int getNum1() {
return this.num1;
}
public int getNum2() {
return this.num2;
}
}
A java class 用于反序列化,我需要更改 JSON 键以与 Helper
class 的实例名称兼容。
public class MyDesClass {
@SerializedName(value = "apple.first", alternate = "apple.num1")
@SerializedName(value = "apple.seconds", alternate = "apple.num2")
private final Helper[] apple;
public MyDesClass(Helper[] apple) {
this.apple = apple;
}
}
而且,也在 main.java 里面,我有:
/* .... */
Reader f = new FileReader( PATH_TO_THE_JSON_FILE);
Gson gson = new Gson();
GameBoard gameBoard = gson.fromJson(f, MyDesClass.class);
/* .... */
我的问题是如何在 MyDesClass
?目前,我收到 SerializedName is not a repeatable annotation type
错误。
您需要在 Helper class 中使用 @SerializedName
(并根据需要更新 MyDesClass
):
public class Helper {
@SerializedName(value = "first" alternate={"num1","fst"})
private int num1;
@SerializedName(value = "second" alternate={"num2","snd"})
private int num2;
public Helper(Helper other) {
this.num1 = other.num1;
this.num2 = other.num2;
}
public int getNum1() {
return this.num1;
}
public int getNum2() {
return this.num2;
}
}
为了符合更新后的 JSON,MyDesClass
需要有另一个字段 orange
:
public class MyDesClass {
@SerializedName("apple")
private final Helper[] apple;
@SerializedName("orange")
private final Helper[] orange;
public MyDesClass(Helper[] apple, Helper[] orange) {
this.apple = apple;
this.orange = orange;
}
// ...
}