如何使用FlexJSON序列化Map<String, List<Object>>?

3

我有一个对象,想将其序列化为JSON。这个对象是一个带有特定对象列表的映射。它看起来类似于这样:

Map<String, List<Object>> map = new Map<String, List<Object>>();

我正在使用FlexJSON。我只能使用 flexjson.JSONSerializer 来工作。这是我的尝试:

JSONSerializer jsonSerializer = new JSONSerializer();
//        jsonSerializer.include("map");
//        jsonSerializer.include("map.myList.object");
jsonSerializer.transform(new MapTransformer(), "map");
jsonSerializer.exclude("*.class");

你可以看到我现在正在尝试使用Transformer类,但我还没有成功。如果我的List<Object>有自己的名称,例如myList,那么注释掉的行将起作用,我想这样做。但是它没有自己的名称,因为它是我的映射的values

如何使用FlexJSON将这样的对象序列化为JSON?

2个回答

4

“Quoi”是正确的答案,也是您想使用的答案。但是为了让您更加了解它的工作原理,您可以这样做:

new JSONSerializer().include("values.values").serialize( myMap );

地图和列表是容器,其中包含的元素有特殊的表达式。当你想要谈论容器中值的路径时,可以在路径中使用 "values" 表达式。Map 有两个特殊的表达式 "keys" 和 "values"。其他集合有 "values"。

另一个选项是使用通配符,如下所示:

   new JSONSerializer().include("values.*").serialize( myMap );

你可以看到Quoi的回答中使用了通配符来排除类属性。

通配符是我这种情况下的最佳选择。正如我所提到的,我只能在 flexjson.JSONSerializer 对象上进行操作。 - woyaru
我尝试了Map<String,Object>,使用和不使用include("values"),但是JSON结果都是一样的;当使用“values”时,我期望在JSON中看到映射中不同Object类型的类类型数据? - raffian

3
尝试一下。
String jsonString = new JSONSerializer().exclude("*.class").deepSerialize(map);

deepSerialize方法执行目标实例的深度序列化。默认情况下,它将包括所有集合、映射和数组,因此除非您想要包含由注释排除的内容,否则包含操作将被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接