我看过很多类似的问题。我找不到适合我确切问题的任何东西。在所有示例中,我发现List是在父类中定义的对象类型,而我只有一个Strings列表。我尝试使用简单的数组String [],并且看到了带有重载反序列化程序并获得TypeToken的示例,但我无法将其捆绑在一起以完成这项工作。我的列表始终为空(如果定义列表时未初始化,则为null)。我在这里缺少什么,感觉就像我在尝试做一些非常简单的事情,但是我发现的所有内容看起来都过于复杂。
这是我的课程:
public class MondoConfig {
private String merchantURL;
public ArrayList<String> targets = new ArrayList<String>();
public MondoConfig () {}
public String getMerchantURL() {
return this.merchantURL;
}
public void setMerchantURL(String url) {
this.merchantURL = url;
}
public ArrayList<String> getTargets() {
return this.targets;
}
public void setTargets(ArrayList<String> t) {
this.targets = t;
}
}
这是我的json:
{
"merchantURL":"https://example.com/collections/posters",
"targets":[
"testing",
"another",
"one more"
]
}
我要反序列化的代码:
BufferedReader br = new BufferedReader(new FileReader("C:\\mondo_config.json"));
MondoConfig config = gson.fromJson(br, MondoConfig.class);
答案 0 :(得分:1)
我在您的代码中看到了一些问题,但是我能够使其正常运行而没有任何问题。
package org.nuttz.gsonTest;
import java.util.ArrayList;
public class MondoConfig {
private String merchantURL;
public ArrayList<String> targets = new ArrayList<String>();
MondoConfig () {}
public String getMerchantURL() {
return this.merchantURL;
}
public void setMerchantURL(String url) {
this.merchantURL = url;
}
public ArrayList<String> getTargets() {
return this.targets;
}
public void setTargets(ArrayList<String> t) {
this.targets = t;
}
}
原始代码中的setMerchantURL()函数不太正确,因此我对其进行了修复。然后,我使用以下代码对其进行了测试:
package org.nuttz.gsonTest;
import java.io.*;
import java.util.List;
import com.google.gson.*;
public class App
{
public static void main( String[] args )
{
Gson gson = new Gson();
try {
BufferedReader br = new BufferedReader(new FileReader("/home/jim/mondoconfig.json"));
MondoConfig config = gson.fromJson(br, MondoConfig.class);
System.out.println("Contents of config:");
System.out.println(config.getMerchantURL());
List<String> targets = config.targets;
for (String t : targets) {
System.out.println(t);
}
}
catch (Exception x) {
x.printStackTrace();
}
}
}
并得到以下结果:
Contents of config:
https://example.com/collections/posters
testing
another
one more
这使用的是GSON的2.8.2版本。换句话说,您处在正确的轨道上,只需要修复MondoConfig类即可。