在JAVA中JSON反序列化期间更改两个文件名

在JAVA中JSON反序列化期间更改两个文件名,java,json,gson,json-deserialization,Java,Json,Gson,Json Deserialization,我有一个json文件 {"apple" : [ { "first" : 3, "second" : 5, } ], "orange" : [ { "fst" : 7, "snd" : 8,

我有一个json文件

{"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
,并且不会反序列化这些条目。有没有解决这个问题的想法?你可能需要检查一下