将 JSON 字符串转换为 java 类

问题描述 投票:0回答:1

我有一个 JSON 字符串,我想将其转换为 Java 类, 但是当我用 Gson 将其转换为类并在控制台中打印时,它显示为 null。

这是我的 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;
    }
}

我想像这样使用“第一个”对象:

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

并获取正确的数据。

java json gson minecraft
1个回答
0
投票

您的 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);
© www.soinside.com 2019 - 2024. All rights reserved.