gpt4 book ai didi

java - 具有多个已知类的 GSON

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:20 26 4
gpt4 key购买 nike

我有以下 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)

最佳答案

我通常按照这种方法将任何复杂的类从 json 转换为对象。这种方法适用于几乎所有东西,如列表、 map 等。这个想法很简单,为复杂的类创建持有者,然后创建类。提供尽可能多的深度。诀窍是匹配 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 中。您无需更改其余代码。

希望对您有所帮助。

关于java - 具有多个已知类的 GSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38226024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com