尝试使用GSON将JSON转换为Java

时间:2014-02-18 17:47:08

标签: java json gson

我是Java新手,但有其他语言经验。我有以下JSON文件,我试图将其带入java程序。

{
    "Progression": [
        {
            "ProgressionName": "An Apple a Day...",
            "Steps": [
                {
                    "StepName": "Collect an Apple",
                    "Type": "COLLECT",
                    "RewardType": "UNLOCK_CRAFTING",
                    "Reward": "minecraft:golden_apple"
                },
                {
                    "StepName": "Craft a Golden Apple",
                    "Type": "CRAFT",
                    "RewardType": "GIVE",
                    "Reward": "minecraft:diamond"
                }
            ]
        },
        {
            "ProgressionName": "Keeps the Dr Away...",
            "Steps": [
                {
                    "StepName": "Collect an Apple",
                    "Type": "COLLECT",
                    "RewardType": "UNLOCK_CRAFTING",
                    "Reward": "minecraft:golden_apple"
                },
                {
                    "StepName": "Craft a Golden Apple",
                    "Type": "CRAFT",
                    "RewardType": "GIVE",
                    "Reward": "minecraft:diamond"
                }
            ]
        }
    ]
}

我有以下类,我认为存储JSON是正确的:

public class ProgressionData {
    private Progression progresion;

    public class Progression {
        private String ProgressionName;
        private ProgressionSteps Steps;
    }

    public class ProgressionSteps {
        private String StepName;
        private String Type;
        private String RewardType;
        private String Reward;
    }
}

这是我正在使用的电话:

BufferedReader br = new BufferedReader(new FileReader(configFile));
ProgressionData progressiondata = new Gson().fromJson(br, ProgressionData.class);

调试代码时,progressiondataNULL。我知道我缺少一些基本的东西,并希望有人能指出我正确的方向。

4 个答案:

答案 0 :(得分:0)

根据您的示例,您的基类应如下所示:

public class ProgressionData {
    private Progression[] progresion;

    public class Progression {
        private String ProgressionName;
        private ProgressionSteps[] Steps;

        // Add getters and setters
    }

    public class ProgressionSteps {
        private String StepName;
        private String Type;
        private String RewardType;
        private String Reward;

        // Add getters and setters
    }

    // Add getter and setter for "Progression"
}

备注:

  • progressionsteps字段实际上是arrays

  • 您需要为您的媒体资源添加getterssetters方法。

  • 您可能会遇到一些问题,因为您正在从json解析Property(从大写P开始)键到property(小写p)。如果您尝试将字段更改为Property,编译器可能会抱怨,因为您不能拥有同名的ClassField。在这种情况下,您必须查找一些GSON解析选项(例如,忽略大小写)。

答案 1 :(得分:0)

您正尝试将array of Progression objects映射到Progression object

改变
private Progression progresion;

private List<Progression> progresion;

private Progression[] progresion;

Progression Step objects

相同

另外,不要忘记为您的成员创建getter / setter或更改访问修饰符

答案 2 :(得分:0)

你的课程错了,因为里面有JSONArray,请尝试以下方法:

public class ProgressionData {

    private List<Progression> progresion;

    public class Progression {

        private String ProgressionName;
        private List<ProgressionSteps> Steps;

    }

    public class ProgressionSteps {

        private String StepName;
        private String Type;
        private String RewardType;
        private String Reward;

    }
}

答案 3 :(得分:0)

您应该更新以下内容以使其正常工作

  • progresion中存在拼写错误,应为Progression。 (这可能是将对象设置为Null的主要原因,并且变量的名称应该与Json中的键匹配,而不是类名。您还可以使用POGO类中的注释使用{{{}来使用键来映射变量的名称。 1}})
  • @SerializedName("Progression")是一个数组
  • {li> ProgressionSteps内是一个数组

请按以下步骤更新您的ProgressionData。

Progression

使用下面的代码来解析你的json,

public class ProgressionData {
    @SerializedName("Progression")
    private List<Progression> progression;

    public class Progression {

        private String ProgressionName;
        private List<ProgressionSteps> Steps;

        //Setters and Getters
    }

    public class ProgressionSteps {

        private String StepName;
        private String Type;
        private String RewardType;
        private String Reward;

        //Setters and Getters
    }

    //Setters and Getters
}