当前位置: 首页 > 知识库问答 >
问题:

如何处理“无法转换为类”错误-GSON Java

崔高远
2023-03-14

我正试图将我的列表写到抽象模型中的jtable,然后它返回给我这个错误。在我看来,这可能是由列表格式引起的?名称和金额在错误的地方。这是我的完整错误消息:线程“awt-eventqueue-0”java.lang.ClassCastException:类com.google.gson.internal.LinkedTreemap不能强制转换为类model.medicine(com.google.gson.internal.LinkedTreemap和model.medicine在加载程序'app'的未命名模块中)

有一个代号:这是我的医学课

public class Medicine {

private String name;
private String amount;

public Medicine( String amount, String name){
    this.name = name;
    this.amount = amount;
}

public String getName() {return name;}
public void setName(String name){this.name = name;}

public String getAmount(){return amount;}
public void setAmount(String amount){this.amount = amount;}
}

这是我的转换代码:

public List<Medicine> FromJsonToArray() throws IOException {
    String medicineJson = initArray("Medicines.json").toString();
    Gson gson = new Gson();
    List<Medicine> medicineArray = gson.fromJson(medicineJson, List.class);
    return medicineArray;
    }

转换后我的列表如下所示:

[{amount=123,name=Ibuprofen},{amount=333,name=Ketonal},...]

我的JSON:

[
{
    "amount": "123",
    "name": "Ibuprofen"
},
{
    "amount": "333",
    "name": "Ketonal"
}
]

最后是带有错误的表模型类:

public class MedicineTableModel extends AbstractTableModel {
private List<Medicine> medicines;
private String[] columns;

public  MedicineTableModel(List<Medicine> aMedicineList){
    super();
    medicines = aMedicineList;
    columns = new String[]{"Name", "Amount"};
}


@Override
public int getRowCount() {
    return medicines.size();
}

@Override
public int getColumnCount() {

    return columns.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
    if (columnIndex<medicines.size())
    {
        Medicine c= medicines.get(rowIndex); <---- there is a problem :O
        if(rowIndex == 0) {

            return(c.getName());
        }
     }
    return null;
}
public String getColumnName(int col) {
    return columns[col] ;
}
}

共有1个答案

蓬森
2023-03-14
public List<Medicine> FromJsonToArray() throws IOException {
    String medicineJson = initArray("Medicines.json").toString();
    Gson gson = new Gson();
    Type medicineListType = new TypeToken<List<Medicine>>() {}.getType();
    List<Medicine> medicineArray = gson.fromJson(medicineJson, medicineListType);
    return medicineArray;
}

应该能成功。

基本上,告诉gson反序列化到特定类的列表是一种变通方法。

这是必需的,因为泛型在运行时丢失,并且您的json被反序列化为list map>而不是list

 类似资料: