我有一个json文件
{
"l": {
"default_level": "...",
"impl": "...",
"levels": [
...,
...
]
},
"a": [
{
"format": "...",
"filename": "...",
"rotation": "...",
"ls": [
...,
...
]
}
]
}
我想要映射到
public class ABC {
private List<A> aList = new ArrayList<>();
private L lConfig = new L();
// Gettters and Setters for aList and l
public static class L {
String default_level;
String impl;
List<String> levels = new ArrayList<>();
// Gettters and Setters
@Override
public String toString() {
// ...
}
}
public static class A {
String format;
String filename;
String rotation;
List<String> ls = new ArrayList<>();
// Getters and Setters
@Override
public String toString() {
// ...
}
}
}
正在反序列化
public static BLAH load(String externalConfigFile) throws IOException {
ABC config = null;
Path path = Paths.get(externalConfigFile);
if (Files.exists(path) || Files.isReadable(path)) {
config = new Gson().fromJson(readFile(externalConfigFile), ABC.class);
}
return config;
}
哪,打印后给我
A[]
L{default_level='null', impl='null', levels=[]}
为什么没有设置东西?
答案 0 :(得分:2)
我认为问题只是属性的名称。在Gson中,属性的名称必须与JSON中的字段名称匹配。
因此,您需要更改ABC
类中属性的名称。类似的东西:
public class ABC {
private List<A> a;
private L l;
//All the rest is okay...
}
否则,您应该使用注释@SerializedName
,如下所示:
@SerializedName("a")
private List<A> aList;
@SerializedName("l")
private L lConfig;
答案 1 :(得分:0)
尝试使用数组而不是列表:
private A[] aList = {};
列表&lt; A&gt;会失去它的&lt; A&gt;在运行期间,gson不知道它应该映射你提供它的JSON数组。