我有以下json
{ "file": {"file": "foo.c", "owner": "user123"}
"methods": [{"name": "proc1", "value":"val"}, {"name":"proc2","value":"val2"}]
etc...
}
我知道我可以做类似
的事情class file{
public String file
public String owner
}
class methods{
public String name
public String value
}
我可以打电话
File file= gson.fromJson(jsonInString, File.class);
methods[] array = gson.fromJson(jsonInString, methods[].class);
但如果我需要处理包含许多对象的复杂json,我该怎么办呢
我无法指定gson.fromJson(jsonInString, ListOfClasses)
答案 0 :(得分:1)
我通常按照这种方法获取从json转换为object的任何复杂类。这种方法几乎适用于列表,地图等所有内容。这个想法是复杂类的简单创建持有者,然后创建类。尽可能多地提供深度。诀窍是匹配Json中的名字和你的持有者(和子类)。
文件配置:
class FileConfig{
public String file;
public String owner;
//define toString, getters and setters
}
方法类:
class Method{
public String name;
public String value;
//define toString, getters and setters
}
方法配置:
class MethodConfig{
List<Method> methods = null;
//define toString, getters and setters
}
按住配置:
public class HolderConfig {
private FileConfig file = null;
private MethodConfig methods = null;
public FileConfig getFile() {
return file;
}
public void setFile(FileConfig file) {
this.file = file;
}
public MethodConfig getMethods() {
return file;
}
public void setMethods(MethodConfig methods) {
this.methods = methods;
}
}
构建配置:
public class HolderConfigBuilder {
public static HolderConfig build(JsonObject holderConfigJson) {
HolderConfig configHolderInstance = null;
Gson gsonInstance = null;
gsonInstance = new GsonBuilder().create();
configHolderInstance = gsonInstance.fromJson(holderConfigJson,HolderConfig.class);
return configHolderInstance;
}
}
演示课程:
public class App
{
public static void main( String[] args )
{
HolderConfig configHolderInstance = null;
FileConfig file = null;
configHolderInstance = HolderConfigBuilder.build(<Input Json>);
file = configHolderInstance.getFile();
System.out.println("The fileConfig is : "+file.toString());
}
}
输入Json:
{ "file": {"file": "foo.c", "owner": "user123"}
"methods": [
{"name": "proc1", "value":"val"},
{"name":"proc2","value":"val2"}
]
}
注意:编写代码以在测试代码中获取输入JSON。
这样,无论何时向JSON添加更多元素,都必须为该元素创建一个单独的类,只需将与json相同的元素名称添加到HolderConfig中。您无需更改其余代码。
希望它有所帮助。