GSON反序列化/序列化具有未确定键名的json字符串



我有这样的JSON:

#   "trig_cond": {
#       "_and": {
#               "param1": ["op", "value1"],
#               "param2": ["op", "value2"], ...
#       },
#       "_or": {
#               "param1": ["op", "value1"],
#               "param2": ["op", "value2"], ...
#       }
#    }

"_and"/"_or"部分有数目不详的键,这些键映射到列表对象(每个对象包含两个项)。如何将其反序列化为java对象?我看过各种自定义反序列化选项,但我不明白如何在这个例子中做到json.

根据您的需求,您可以采用几种不同的选项。当您有未知数量的键时,您可以采取的最简单的解决方案之一是简单地将POJO的这些部分保留为JSONObject。

例如,这个POJO将满足您将JSON反序列化为java对象的要求,并且仍然提供您所追求的灵活性。

public class SamplePojo {
    TrigCond trig_cond;
    public static class TrigCond {
        JsonObject _and;
        JsonObject _or;
    }
}

如果你喜欢,你也可以把它们分成不同的文件。

此外,由于在您的示例中,您知道param1param2数组元素中包含的值类型,因此您可以使用Map

这是另一个你可能更喜欢的例子:

public class SamplePojo {
    TrigCond trig_cond;
    public static class TrigCond {
        Map<String, String[]> _and;
        Map<String, String[]> _or;
    }
}

让我知道我是否正确理解了你的问题!

最新更新