Java 用Gson反序列化元组数组

Java 用Gson反序列化元组数组,java,json,gson,retrofit,Java,Json,Gson,Retrofit,我正在对Gson进行改造,我有一个Json对象,如下所示:“费用”:[[0,0.26]、[50000,0.24]、[100000,0.22] 如何使用Gson将其反序列化为元组数组。像这样的东西 public class MyClass{ public List<MyTuple> Fees; } public class MyTuple{ public int volume; public double percentFee; } 公共类MyClass{

我正在对Gson进行改造,我有一个Json对象,如下所示:“费用”:[[0,0.26]、[50000,0.24]、[100000,0.22] 如何使用Gson将其反序列化为元组数组。像这样的东西

public class MyClass{
    public List<MyTuple> Fees;
}

public class MyTuple{
    public int volume;
    public double percentFee;
}
公共类MyClass{
公开收费表;
}
公共类MyTuple{
公共int卷;
公共双倍收费;
}

首先注意:如果我们像下面这样定义
MyClass
会更好。使用小的“f”而不是“f”

public MyClass {
 public List<MyTuple> fees;
}

第一个注意事项:如果我们像下面这样定义
MyClass
会更好。使用小的“f”而不是“f”

public MyClass {
 public List<MyTuple> fees;
}

创建自定义Gson反序列化器解决了我的问题。代码如下:

 GsonBuilder gsonBuilder = new GsonBuilder();
 gsonBuilder.registerTypeAdapter(MyTuple.class, new MyTupleDeserializer());
 Gson gson = gsonBuilder.create();
 MyClass myClass= gson.fromJson(json, MyClass.class);
下面是MyTupleDeserializer类的代码

 private class MyTupleDeserializer implements JsonDeserializer<MyTuple> {
    @Override
    public MyTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonArray tupleValues= json.getAsJsonArray();
        MyTuple myTuple= new MyTuple();
        myTuple.setVolume(tupleValues.get(0).getAsInt());
        myTuple.setPercentFee(tupleValues.get(1).getAsDouble());
        return myTuple;
    }
}
私有类MyTupleDeserializer实现JsonDeserializer{
@凌驾
公共MyTuple反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{
JsonArray tupleValues=json.getAsJsonArray();
MyTuple MyTuple=新的MyTuple();
setVolume(tupleValues.get(0.getAsInt());
myTuple.setPercentFee(tupleValues.get(1.getAsDouble());
返回myTuple;
}
}

创建自定义Gson反序列化程序解决了我的问题。代码如下:

 GsonBuilder gsonBuilder = new GsonBuilder();
 gsonBuilder.registerTypeAdapter(MyTuple.class, new MyTupleDeserializer());
 Gson gson = gsonBuilder.create();
 MyClass myClass= gson.fromJson(json, MyClass.class);
下面是MyTupleDeserializer类的代码

 private class MyTupleDeserializer implements JsonDeserializer<MyTuple> {
    @Override
    public MyTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonArray tupleValues= json.getAsJsonArray();
        MyTuple myTuple= new MyTuple();
        myTuple.setVolume(tupleValues.get(0).getAsInt());
        myTuple.setPercentFee(tupleValues.get(1).getAsDouble());
        return myTuple;
    }
}
私有类MyTupleDeserializer实现JsonDeserializer{
@凌驾
公共MyTuple反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{
JsonArray tupleValues=json.getAsJsonArray();
MyTuple MyTuple=新的MyTuple();
setVolume(tupleValues.get(0.getAsInt());
myTuple.setPercentFee(tupleValues.get(1.getAsDouble());
返回myTuple;
}
}

您的解决方案不起作用,因为我有一个元组列表。每个元组是2个不同对象类型(整数和双精度)的2元素数组。知道吗?你有没有编译错误?或者数据未正确反序列化?谢谢您的帮助。我终于学会了如何使用自定义Gson反序列化程序来解析它。因为我有一个元组列表,所以您的解决方案不起作用。每个元组是2个不同对象类型(整数和双精度)的2元素数组。知道吗?你有没有编译错误?或者数据未正确反序列化?谢谢您的帮助。我终于学会了如何使用自定义Gson反序列化程序来解析它。