我是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);
调试代码时,progressiondata
为NULL
。我知道我缺少一些基本的东西,并希望有人能指出我正确的方向。
答案 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"
}
备注:强>
progression
和steps
字段实际上是arrays
。
您需要为您的媒体资源添加getters
和setters
方法。
您可能会遇到一些问题,因为您正在从json解析Property
(从大写P开始)键到property
(小写p)。如果您尝试将字段更改为Property
,编译器可能会抱怨,因为您不能拥有同名的Class
和Field
。在这种情况下,您必须查找一些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")
是一个数组Progression
在Steps
内是一个数组
请按以下步骤更新您的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
}