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

时间:2016-10-22 21:53:33

标签: java json gson

我有这样的JSON:

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

“_and”/“_或”部分具有未确定数量的键,这些键映射到列表对象(每个包含两个项目)。 如何将其反序列化为java对象?我已经查看了各种自定义反序列化选项,但我不明白如何为这个例子json做这件事。

1 个答案:

答案 0 :(得分:1)

根据您的要求,您可以选择几种不同的选项。当您拥有未知数量的密钥时,您可以采取的最简单的解决方案之一就是将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;
    }
}

如果我理解你的问题,请告诉我!