0

我有一个 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=[]}

为什么东西没有设置?

4

2 回答 2

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;
于 2013-06-27T21:57:30.993 回答
0

尝试在这里使用数组而不是列表:

private A[] aList = {};

List<A> 将在运行时丢失它的 <A> ,并且 gson 将不知道它应该将您提供的 JSON 数组映射到哪里。

于 2013-06-27T21:44:57.350 回答