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

Posted

技术标签:

【中文标题】如何使用 FlexJSON 序列化 Map<String, List<Object>>【英文标题】:How to serialize Map<String, List<Object>> with FlexJSON 【发布时间】:2012-09-16 23:00:43 【问题描述】:

我有一个要序列化为 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&lt;Object&gt; 有自己的名称,例如myList,注释行将起作用。但它没有自己的名字,因为它是我地图的values

如何使用 FlexJSON 将此类对象序列化为 JSON?

【问题讨论】:

【参考方案1】:

Quoi 是正确的,并且很可能是您想要使用的答案。但是,为了了解更多关于它的工作原理,您可以这样做:

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

地图和列表是容器,对其中包含的元素有特殊的表达方式。当您想谈论容器的值的路径时,您可以在路径中使用“值”表达式。 Map 的两个特殊表达式“键”和“值”。其他集合有“价值”。

另一种选择是像这样使用通配符:

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

您还可以看到 Quoi 的答案中使用的通配符来排除类属性。

【讨论】:

通配符是我的最佳选择。正如我所提到的,我只能对flexjson.JSONSerializer 对象进行操作。 我为Map&lt;String,Object&gt;尝试了这个,有和没有include("values"),但是json结果是一样的;使用"values"时,我希望在地图中看到不同Object类型的json中的类类型数据?【参考方案2】:

试试

String jsonString = new JSONSerializer().exclude("*.class").deepSerialize(map);

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

【讨论】:

以上是关于如何使用 FlexJSON 序列化 Map<String, List<Object>>的主要内容,如果未能解决你的问题,请参考以下文章

Flexjson 和 Dexguard/Proguard

关于flexjson将json转为javabean的使用

如何使用 boost std::vector of boost::unordered_map 进行序列化/反序列化

您将如何使用协议缓冲区对 Map<String, Object> 进行编码?

如何在火花中使用地图而不实现可序列化?

使用 boost 序列化库序列化 stdext::hash_map