将2D对象数组反序列化为JSON到Java
我正在使用GSON反序列化我的JSON字符串。当尝试反序列化2D对象数组时,它似乎会阻塞。以下是要点:将2D对象数组反序列化为JSON到Java,java,arrays,json,deserialization,gson,Java,Arrays,Json,Deserialization,Gson,我正在使用GSON反序列化我的JSON字符串。当尝试反序列化2D对象数组时,它似乎会阻塞。以下是要点: { . .. ... "states": [ {"SPAWNINGPHASE": [{"name": "STATEA", "duration": 4}, {"name": "STATEB", "duration": 4}]}, {"ALIVEPHASE": [{"name": "STATEA", "duration": 5}, {"n
{ .
..
...
"states": [
{"SPAWNINGPHASE": [{"name": "STATEA", "duration": 4}, {"name": "STATEB", "duration": 4}]},
{"ALIVEPHASE": [{"name": "STATEA", "duration": 5}, {"name": "STATEB", "duration": 4}]}
]
}
以上是更大的JSON的一部分。
我得到预期的BEGIN\u数组,但它是BEGIN\u对象
我已经查看了我的JSON,但我不知道哪里不正确
Group g=gson.fromJson(configFile, Group.class);
这就是我开始阅读的原因。这还不足以处理2D数组的字符串吗
在小组课上,我两个都试过了
public State[][] states;
及
公共列表状态;
其他一切似乎都反序列化了
我必须使用这个(下面)
Type collectionType=new-TypeToken(){}.getType();
Collection ints2=gson.fromJson(json,collectionType);
您显示的JSON有一个字段表示
该字段包含一个数组,显示为包含两种不同类型的对象。一个有一个字段spawingphase
,另一个有一个字段ALIVEPHASE
。其中每一个都包含一个数组,该数组包含另一种类型的对象
这给POJO的自动反序列化带来了问题
唯一可行的方法是,如果State
类的每个“阶段”都有字段(这是假设您有一个名为nameanduration
的Java类,您可以将这些内部对象映射到该类)
Gson会默默地忽略JSON中缺少的任何字段,因此最终得到的是状态对象的列表
,其中只设置了一个字段,而所有其他字段都设置为null
按原样,您需要:
public List<Map<String, List<NameAndDuration>>> states;
并相应地更改您的状态
类:
class State {
String phase;
List<NameAndDuration> values;
}
类状态{
串相;
列表值;
}
(注意,您也可以在此处为阶段使用枚举
)
现在列出状态代码>变得更加有用。(虽然这似乎有点用词不当;似乎你真的有一个包含状态信息的“阶段”列表,而不是一个“状态”列表。)谢谢,这是一个很好的解释。选项A对我有效,但我想尝试选项B。从长远来看,它似乎会更容易使用。
class State {
List<NameAndDuration> SPAWNINGPHASE;
List<NameAndDuration> ALIVEPHASE;
...
}
List<State> states;
public List<Map<String, List<NameAndDuration>>> states;
{
"states": [
{
"phase": "SPAWNINGPHASE",
"values": [
{
"name": "STATEA",
"duration": 4
},
{
"name": "STATEB",
"duration": 4
}
]
}
]
}
class State {
String phase;
List<NameAndDuration> values;
}