Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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
Java 如何用时间戳数据反序列化包含arraylist的类_Java_Json_Gson - Fatal编程技术网

Java 如何用时间戳数据反序列化包含arraylist的类

Java 如何用时间戳数据反序列化包含arraylist的类,java,json,gson,Java,Json,Gson,我有一个jsonstring,如下所示 {"coaList":[{"iD":324,"strName":"Cash","hasChildren":false,"amount":3500.0,"transDate":1421346600000},{"iD":326,"strName":"Cash","hasChildren":false,"amount":2000.0,"transDate":1421346600000},{"iD":328,"strName":"HDFC Bank","hasCh

我有一个jsonstring,如下所示

{"coaList":[{"iD":324,"strName":"Cash","hasChildren":false,"amount":3500.0,"transDate":1421346600000},{"iD":326,"strName":"Cash","hasChildren":false,"amount":2000.0,"transDate":1421346600000},{"iD":328,"strName":"HDFC Bank","hasChildren":false,"amount":2500.0,"transDate":1421346600000}]}
我需要将此字符串转换为CoaAccountList类对象。下面是CoaAccountList类。 CoaAccountList.java:

public class CoaAccountList implements Serializable  {

private List<COAAccount> coaList;

public List<COAAccount> getCoaList() {
    return coaList;
}

public void setCoaList(List<COAAccount> coaList) {
    this.coaList = coaList;
}

}
下面是Coaccount类

coaccount.java:

public class COAAccount implements Serializable {
private int iD;
private String strName;
private boolean hasChildren;
private float amount;
private Timestamp transDate;

public COAAccount() {
    super();
    // TODO Auto-generated constructor stub
}

public COAAccount(int iD, String strName, boolean hasChildren, float amount, Timestamp transDate) {
    super();
    this.iD = iD;
    this.strName = strName;
    this.hasChildren = hasChildren;
    this.amount = amount;
    this.transDate = transDate;
}

public int getiD() {
    return iD;
}

public void setiD(int iD) {
    this.iD = iD;
}

public String getStrName() {
    return strName;
}

public void setStrName(String strName) {
    this.strName = strName;
}

public boolean isHasChildren() {
    return hasChildren;
}

public void setHasChildren(boolean hasChildren) {
    this.hasChildren = hasChildren;
}

public float getAmount() {
    return amount;
}

public void setAmount(float amount) {
    this.amount = amount;
}

public Timestamp getTransDate() {
    return transDate;
}

public void setTransDate(Timestamp transDate) {
    this.transDate = transDate;
}

@Override
public String toString() {
    return strName;
}
}

请帮助我将此json字符串转换为CoaAccountList对象。

您需要创建一个自定义反序列化方法来解析时间戳

例如:

GsonBuilder builder = new GsonBuilder();

builder.registerTypeAdapter(Timestamp.class, new JsonDeserializer<Timestamp>() {

@Override
public Timestamp deserialize(JsonElement json, Type type, JsonDeserializationContext deserializationContext) throws JsonParseException {
    return new Timestamp(json.getAsJsonPrimitive().getAsLong());
    }
});

Gson gson = builder.create();
CoaAccountList transHisList = gson.fromJson(jsonString, CoaAccountList.class);
GsonBuilder=newgsonbuilder();
registerTypeAdapter(Timestamp.class,新的JsonDeserializer(){
@凌驾
公共时间戳反序列化(JsonElement json,类型类型,JsonDeserializationContext反序列化Context)引发JsonParseException{
返回新的时间戳(json.getAsJsonPrimitive().getAsLong());
}
});
Gson Gson=builder.create();
coaccountlist transHisList=gson.fromJson(jsonString,coaccountlist.class);

您需要创建一个自定义的反序列化方法来解析时间戳

例如:

GsonBuilder builder = new GsonBuilder();

builder.registerTypeAdapter(Timestamp.class, new JsonDeserializer<Timestamp>() {

@Override
public Timestamp deserialize(JsonElement json, Type type, JsonDeserializationContext deserializationContext) throws JsonParseException {
    return new Timestamp(json.getAsJsonPrimitive().getAsLong());
    }
});

Gson gson = builder.create();
CoaAccountList transHisList = gson.fromJson(jsonString, CoaAccountList.class);
GsonBuilder=newgsonbuilder();
registerTypeAdapter(Timestamp.class,新的JsonDeserializer(){
@凌驾
公共时间戳反序列化(JsonElement json,类型类型,JsonDeserializationContext反序列化Context)引发JsonParseException{
返回新的时间戳(json.getAsJsonPrimitive().getAsLong());
}
});
Gson Gson=builder.create();
coaccountlist transHisList=gson.fromJson(jsonString,coaccountlist.class);

您需要创建一个自定义的反序列化方法来解析时间戳

例如:

GsonBuilder builder = new GsonBuilder();

builder.registerTypeAdapter(Timestamp.class, new JsonDeserializer<Timestamp>() {

@Override
public Timestamp deserialize(JsonElement json, Type type, JsonDeserializationContext deserializationContext) throws JsonParseException {
    return new Timestamp(json.getAsJsonPrimitive().getAsLong());
    }
});

Gson gson = builder.create();
CoaAccountList transHisList = gson.fromJson(jsonString, CoaAccountList.class);
GsonBuilder=newgsonbuilder();
registerTypeAdapter(Timestamp.class,新的JsonDeserializer(){
@凌驾
公共时间戳反序列化(JsonElement json,类型类型,JsonDeserializationContext反序列化Context)引发JsonParseException{
返回新的时间戳(json.getAsJsonPrimitive().getAsLong());
}
});
Gson Gson=builder.create();
coaccountlist transHisList=gson.fromJson(jsonString,coaccountlist.class);

您需要创建一个自定义的反序列化方法来解析时间戳

例如:

GsonBuilder builder = new GsonBuilder();

builder.registerTypeAdapter(Timestamp.class, new JsonDeserializer<Timestamp>() {

@Override
public Timestamp deserialize(JsonElement json, Type type, JsonDeserializationContext deserializationContext) throws JsonParseException {
    return new Timestamp(json.getAsJsonPrimitive().getAsLong());
    }
});

Gson gson = builder.create();
CoaAccountList transHisList = gson.fromJson(jsonString, CoaAccountList.class);
GsonBuilder=newgsonbuilder();
registerTypeAdapter(Timestamp.class,新的JsonDeserializer(){
@凌驾
公共时间戳反序列化(JsonElement json,类型类型,JsonDeserializationContext反序列化Context)引发JsonParseException{
返回新的时间戳(json.getAsJsonPrimitive().getAsLong());
}
});
Gson Gson=builder.create();
coaccountlist transHisList=gson.fromJson(jsonString,coaccountlist.class);

在需要使用自定义反序列化模式的情况下,Gson允许您根据类型注册自己的反序列化代码

要做到这一点,您首先需要从GsonBuilder中实例化Gson,而不是使用以下代码:

GsonBuilder gson = new GsonBuilder();
然后,在处理类型
时间戳
时,需要将
JsonDeserializer
实例附加到
GsonBuilder
中,如下所示:

gson.registerTypeAdapter(Timestamp.class, new GsonTimestampDeserializer());
注意:
GsonTimestampDeserializer
是我们在下面创建的一个自定义类,从技术上讲,您可以随意命名它

在注册自定义反序列化程序时,当Gson需要从原始类型(int、string、double等)转换为指定的注册类型时,它将根据需要从JsonDeserializer接口自动调用deserialize()方法。为了利用这一点,我们实现了如下反序列化程序:

private class GsonTimestampDeserializer implements JsonDeserializer<Timestamp>{
    public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException{
        return new Timestamp(json.getAsJsonPrimitive().getAsLong());
    }
}
私有类GsonTimestampDeserializer实现JsonDeserializer{
公共时间戳反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{
返回新的时间戳(json.getAsJsonPrimitive().getAsLong());
}
}
注意:我假设您正在使用java.sql中的Timestamp对象,它提供了一个耗时很长的构造函数

总而言之:

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(Timestamp.class, new GsonTimestampDeserializer());

private class GsonTimestampDeserializer implements JsonDeserializer<Timestamp>{
    public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException{
        return new Timestamp(json.getAsLong());
    }
}

Gson gsonInstance = gson.create();

CoaAccountList transHisList = gsonInstance.fromJson(jsonString, CoaAccountList.class);
GsonBuilder gson=new GsonBuilder();
registerTypeAdapter(Timestamp.class,新的GsonTimestampDeserializer());
私有类GsonTimestampDeserializer实现JsonDeserializer{
公共时间戳反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{
返回新的时间戳(json.getAsLong());
}
}
Gson gsonInstance=Gson.create();
CoaAccountList transHisList=gsonInstance.fromJson(jsonString,CoaAccountList.class);
当Gson解析JSON字符串并尝试填充相应的值时,它会在transDate上遇到
时间戳
类型,而不是使用java提供的默认对象反序列化方案,而是使用我们提供的自定义反序列化方案将long转换为时间戳对象


该方法可以推广到各种复杂的容器类,这些容器类可以将其数据存储为单个基元类型,同样地,可以使用Gson序列化程序来实现相反的效果。

在需要使用自定义反序列化模式的情况下,Gson允许您根据类型注册自己的反序列化代码

要做到这一点,您首先需要从GsonBuilder中实例化Gson,而不是使用以下代码:

GsonBuilder gson = new GsonBuilder();
然后,在处理类型
时间戳
时,需要将
JsonDeserializer
实例附加到
GsonBuilder
中,如下所示:

gson.registerTypeAdapter(Timestamp.class, new GsonTimestampDeserializer());
注意:
GsonTimestampDeserializer
是我们在下面创建的一个自定义类,从技术上讲,您可以随意命名它

在注册自定义反序列化程序时,当Gson需要从原始类型(int、string、double等)转换为指定的注册类型时,它将根据需要从JsonDeserializer接口自动调用deserialize()方法。为了利用这一点,我们实现了如下反序列化程序:

private class GsonTimestampDeserializer implements JsonDeserializer<Timestamp>{
    public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException{
        return new Timestamp(json.getAsJsonPrimitive().getAsLong());
    }
}
私有类GsonTimestampDeserializer实现JsonDeserializer{
公共时间戳反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{
复述