Gson ->导入包含对象的JSON

lqfhib0f  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(162)

我试图用Gson导入一个Json文件,这个文件包含我创建的类的结构。但是,尽管toJson方法有效,对象的结构却无效。
我有一个名为'Tienda'的类,它有两个属性:(String)Name,(List<Venta>)ventas.其中'Venta'是其他类,但当我调用方法toJson时,结果是对象'Tienda'的列表,其中属性List<Venta>为空.我应该做些不同的事情吗?
下面是我如何将文件发送到List<Tienda>

Type listOfMyClassObject = new TypeToken<ArrayList<Tienda>>() {}.getType();
        List<Tienda> tiendas= new GsonBuilder().setDateFormat("dd/MM/yyy").create().fromJson(new FileReader("C:\\Archivos\\Ejemplo JSON Ventas.JSON"), listOfMyClassObject);

而当我看到结果的内容时它是这样的:

1dkrff03

1dkrff031#

我认为你在类中有错误的类型字段。字段必须是日期类型(java.util.Date,java.sql.Timestamp,java.sql.Date)
这是一个获取日期对象示例任务

//simple Object
Tienda demo = new GsonBuilder().setDateFormat("dd/MM/yyy").create().fromJson(json, Tienda.class);

//array
List<Tienda> demo = new GsonBuilder().setDateFormat("dd/MM/yyy").create().fromJson(json, type);

这是我的例子类“Tienda”

import java.util.Date;

public class Tienda {
  public Date ventas;
}

我又写了一些测试,也许能帮你解决更多的问题

import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import org.junit.Test;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import static org.junit.Assert.assertEquals;

public class FormatData {

  @Test
  public void testDeserializeArray() {
    //given
    String json = "[{\"ventas\":\"08/04/2020\"}, {\"ventas\":\"08/03/2020\"}]";
    Type type = new TypeToken<ArrayList<Tienda>>() {
    }.getType();
    //when
    List<Tienda> demo = new GsonBuilder().setDateFormat("dd/MM/yyy").create().fromJson(json, type);
    //then
    assertEquals(2, demo.size());
    assertEquals(1586296800000L, demo.get(0).ventas.getTime());
    assertEquals(1583622000000L, demo.get(1).ventas.getTime());
  }

  @Test
  public void testSimpleDeserialize() {
    //given
    String json = "{\"ventas\":\"08/04/2020\"}";
    //when
    Tienda demo = new GsonBuilder().setDateFormat("dd/MM/yyy").create().fromJson(json, Tienda.class);
    //then
    assertEquals(1586296800000L, demo.ventas.getTime());
  }

  @Test
  public void testSerialize() {
    //given
    Tienda demo = new Tienda();
    demo.ventas = new Date(1586296800000L);
    //when
    String json = new GsonBuilder().setDateFormat("dd/MM/yyy").create().toJson(demo);
    //then
    assertEquals("{\"ventas\":\"08/04/2020\"}", json);
  }
}
u4dcyp6a

u4dcyp6a2#

我发现这个错误太愚蠢了。我有一个大写字母的Tienda,它应该是小写的。它没有返回错误,只是让数组为空,因为它没有找到确切的名称。

相关问题