Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gson反序列化:Json字段名与Java对象字段名不同_Java_Json - Fatal编程技术网

Gson反序列化:Json字段名与Java对象字段名不同

Gson反序列化:Json字段名与Java对象字段名不同,java,json,Java,Json,传递给我的json中有一个字段与我想要反序列化此json的Java对象的字段名不同。假设我要反序列化: {"bag": "LV"} 进入 因此,反序列化后,字段backpack应具有值LV 问题是MyClass来自一个我无法更改或添加注释的库。我也无法控制传递给我的json。我想知道如何配置Gson来实现这一点。所有其他字段都完全匹配。似乎您需要编写一个自定义反序列化程序-幸运的是,有一个关于它的讨论-试一试,并让我们知道这是否有帮助。它看起来确实像你正在寻找的。切换到Jackson并使用Mi

传递给我的json中有一个字段与我想要反序列化此json的Java对象的字段名不同。假设我要反序列化:

{"bag": "LV"}
进入

因此,反序列化后,字段
backpack
应具有值
LV


问题是
MyClass
来自一个我无法更改或添加注释的库。我也无法控制传递给我的json。我想知道如何配置Gson来实现这一点。所有其他字段都完全匹配。

似乎您需要编写一个自定义反序列化程序-幸运的是,有一个关于它的讨论-试一试,并让我们知道这是否有帮助。它看起来确实像你正在寻找的。切换到Jackson并使用Mixin。
class CustomStrategy implements FieldNamingStrategy {

    @Override
    public String translateName(Field field) {
        if (field.getName().equals("backpack")) {
            return "bag";
        }
        return field.getName();
    }
}

Gson gson = new GsonBuilder().setFieldNamingStrategy(new CustomStrategy()).create();
class CustomStrategy implements FieldNamingStrategy {

    @Override
    public String translateName(Field field) {
        if (field.getName().equals("backpack")) {
            return "bag";
        }
        return field.getName();
    }
}

Gson gson = new GsonBuilder().setFieldNamingStrategy(new CustomStrategy()).create();