在JAVA中JSON反序列化期间更改两个文件名
我有一个json文件在JAVA中JSON反序列化期间更改两个文件名,java,json,gson,json-deserialization,Java,Json,Gson,Json Deserialization,我有一个json文件 {"apple" : [ { "first" : 3, "second" : 5, } ], "orange" : [ { "fst" : 7, "snd" : 8,
{"apple" : [
{
"first" : 3,
"second" : 5,
}
],
"orange" : [
{
"fst" : 7,
"snd" : 8,
}
],
}
用于反序列化的帮助器类
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;
}
}
一个用于反序列化的java类,我需要更改JSON键以与Helper
类的实例名兼容
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
中同时将两个值(例如first
和second
)转换为num1
和num2
?当前,我得到的SerializedName不是可重复的注释类型
错误。您需要在Helper类中使用@SerializedName
(并在需要时更新MyDesClass
):
为了符合更新后的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;
}
// ...
}
您需要在Helper类中使用
@SerializedName
(如果需要,更新MyDesClass
):
为了符合更新后的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键可以是可变的。对不起,如果不清楚的话。为了澄清,我在示例中扩展了JSON文件。因此,如果在
Helper
类中反序列化是唯一的选项,那么有没有办法让值
输入@SerializedName
变量?我更新了更新JSON的响应-它需要另一个字段orange
。但是,您可能打算将@SerializedName应用于您的apple
字段。或者使用
的地图来代替MyDesClass
。非常感谢您的回答,它解决了我的大部分问题。只是,这里还有一个问题。在我最初的问题中,JSON中的第一个键是一个对象,第二个键是一个对象数组。在JSON中,大多数条目的顺序为key1:Object,key2:[Object1,…]
。但是,在某些情况下,顺序是相反的key1:[Object1,…],key2:Object
,并且不会反序列化这些条目。有没有解决这个问题的想法?您可能需要检查一下,谢谢您的解决方案。但是,JSON键可以是可变的。对不起,如果不清楚的话。为了澄清,我在示例中扩展了JSON文件。因此,如果在Helper
类中反序列化是唯一的选项,那么有没有办法让值
输入@SerializedName
变量?我更新了更新JSON的响应-它需要另一个字段orange
。但是,您可能打算将@SerializedName应用于您的apple
字段。或者使用
的地图来代替MyDesClass
。非常感谢您的回答,它解决了我的大部分问题。只是,这里还有一个问题。在我最初的问题中,JSON中的第一个键是一个对象,第二个键是一个对象数组。在JSON中,大多数条目的顺序为key1:Object,key2:[Object1,…]
。但是,在某些情况下,顺序是相反的key1:[Object1,…],key2:Object
,并且不会反序列化这些条目。有没有解决这个问题的想法?你可能需要检查一下