【发布时间】:2013-03-05 12:59:45
【问题描述】:
我有以下 Java 类:
public class ModuleParsed {
String id_component;
String id_instance;
Map<ModuleParam, ModuleParam> input;
Map<ModuleParam, List<ModuleParam>> output;
int id_paas;
}
和
public class ModuleParam {
String name;
Object type;
}
将其解析为List<ModuleParsed> 的 JSON 应该是什么?
listModules = gson.fromJson(br, new TypeToken<List<ModuleParsed>>() {}.getType());
在我介绍输入和输出参数之前一切正常。
编辑
通过反向过程,我发现 JSON 应该类似于
[
{
"id_component": "mod1",
"id_instance": "mod1_inst1",
"input": {
"moduleParam": {
"name": "param3",
"type": "obj3"
},
"moduleParam": {
"name": "param2",
"type": "obj2"
}
},
"id_paas": 1
},
{
"id_component": "mod2",
"id_instance": "mod2_inst1",
"input": {
"moduleParam": {
"name": "param3",
"type": "obj3"
},
"moduleParam": {
"name": "param2",
"type": "obj2"
}
},
"id_paas": 1
}
]
moduleParam 元素类似于:parser.ModuleParam@36c51089
无论我如何命名这些元素,我都会收到以下错误:
Exception in thread "main" com.google.gson.JsonParseException: Expecting object found: "moduleParam"
如何使用 Gson 获取 ModuleParsed 类?
【问题讨论】:
-
使用可变的、复杂的对象作为
Map键是一个非常糟糕的主意,尤其是因为你没有覆盖equals 和hashcode。您还会发现从它们生成可用的 JSON 非常困难。见:google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/… -
@Brian,如果我只使用 Map
> 可以吗?