我有一个JSON字符串,我想将它转换为Java类, 但当我使用gson将其转换为类并在我的控制台中打印时,它显示为空.

这是我的JSON字符串:

{
    "first": [
        {
            "price_1": {
                "material_name": "EMERALD",
                "amount": 5
            },
            "price_2": {
                "material_name": "STONE",
                "amount": 5
            },
            "out": {
                "material_name": "EMERALD_BLOCK",
                "amount": 1
            }
        },
        {
            "price_1": {
                "material_name": "EMERALD",
                "amount": 7
            },
            "out": {
                "material_name": "DIAMOND_AXE",
                "amount": 0
            }
        }
    ]
}

以下是我的课程:

public class TradeListController {
    public static List<MerchantRecipe> get_trade_list(String trade_list_name) {
        String jsonString = "..."
        Gson gson = new GsonBuilder().create();
        Type type = new TypeToken<TradeList>() {}.getType();
        TradeList tradeList = gson.fromJson(jsonString, type);
        System.out.println(String.valueOf(tradeList));
        return null;
    }
}

class TradeList {
    private Map<String, List<TradeItem>> dynamicItems;

    public Map<String, List<TradeItem>> getDynamicItems() {
        return dynamicItems;
    }

    public void setDynamicItems(Map<String, List<TradeItem>> dynamicItems) {
        this.dynamicItems = dynamicItems;
    }

    @Override
    public String toString() {
        return "TradeList{" +
                "dynamicItems=" + dynamicItems +
                '}';
    }
}

class TradeItem {
    private Price price_1;
    private Price price_2;
    private Price out;

    public Price getPrice_1() {
        return price_1;
    }

    public void setPrice_1(Price price_1) {
        this.price_1 = price_1;
    }

    public Price getPrice_2() {
        return price_2;
    }

    public void setPrice_2(Price price_2) {
        this.price_2 = price_2;
    }

    public Price getOut() {
        return out;
    }

    public void setOut(Price out) {
        this.out = out;
    }

    @Override
    public String toString() {
        return "TradeItem{" +
                "price_1=" + price_1 +
                ", price_2=" + price_2 +
                ", out=" + out +
                '}';
    }
}

class Price {
    private String material_name;
    private int amount;

    public String getMaterial_name() {
        return material_name;
    }

    public void setMaterial_name(String material_name) {
        this.material_name = material_name;
    }

    public int getAmount() {
        return amount;
    }

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

我想这样使用"First"对象:

TradeItem[] trade_list = tradeList.get_trade_items(trade_list_name);

并获得正确的数据.

推荐答案

您的JSON字符串不包含dynamicItems字段. 这将实现您的目标tradeList.getDynamicItems().get("first"):

Gson gson = new GsonBuilder().create();
Type type = new TypeToken<Map<String, List<TradeItem>>>() {}.getType();
Map<String, List<TradeItem>> dynamicItems = gson.fromJson(jsonString, type);
TradeList tradeList = new TradeList();
tradeList.setDynamicItems(dynamicItems);

Java相关问答推荐

RDX触发ChoiceBox转换器(并按字符串值排序)

Java List with all combinations of 8 booleans

DTO到实体,反之亦然,控制器和服务之间的哪一层应该处理转换?

Mapstruct不能正确/完全映射属性

Java:使用Class.cast()将对象转换为原始数组

用户填充的数组列表永不结束循环

Spring Security不允许加载js

如何为JavaFX Spring Boot应用程序制作Windows/MacOS/Linux安装程序

使用用户引入的参数生成人员数组

迁移到Java 17后,日期显示不准确

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

有没有办法知道在合并中执行了什么操作?

无法在IntStream上应用Collectors.groupingBy

Java List有一个在一个位置添加多个元素的方法,但我找不到一个在一个位置删除多个元素的方法

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

ReturnedRect在升级后反转

双对象供应商

java.exe如何执行java源代码?

Spring Integration SFTP 连接失败 - 无法协商 kex 算法的密钥交换

为什么当我输入变量而不是直接输入字符串时,我的方法不起作用?